Preheat the oven to 375°F. Line a baking sheet with foil. Grease a 2-quart baking dish, place it on the foil-lined baking sheet and set aside.
To make the topping: put the potatoes in a pot of salted water and bring to a boil. Boil until the potatoes are tender and drain. Mash the potatoes with the milk, sour cream, and cheddar cheese. Adjust seasoning with more salt, if needed. Cover and keep warm until needed.
To make the filling: Heat the milk and bay leaf to a simmer in a medium saucepan over medium heat. Add the cod and poach for about 5 to 7 minutes or until it is cooked through and begins to flake (the time is dependent on the thickness of the fish). Carefully strain out the fish and set aside, breaking it up into large bite-size pieces. Discard the bay leaves, but reserve the hot milk.
In a large pot add the butter or olive oil and heat over medium-high. Add the onions and saute until they begin to soften, about 3 or 4 minutes. Add the garlic and cook another 2 minutes. Mix in the flour and stir to coat all of the onions with it. After another minute, gently begin whisking in the hot milk (from poaching the fish). Whisk until smooth and then simmer for about 5 minutes or until it thickens enough to coat the back of a spoon. Season with salt and pepper as needed.
Stir in the peas, parsley, and lemon zest. Fold in the smoked salmon and poached cod gently, then pour the mixture into the prepared baking dish. Carefully top with the mashed potatoes, sealing in all the edges first (to prevent the filling from bubbling over the edges too much) and then cover the remaining filling with the remaining mashed potatoes. Use a fork to draw lines over the mashed potato topping to give it texture.
Bake the fish pie for 30 to 35 minutes or until the filling is bubbling (it may bubble out of some of the edges) and the topping starts to brown. At this point, you can broil the fish pie for an addition few minutes to brown it more, if desired. Serve immediately in wide individual bowls.