Make the filling by chopping the onions, carrots and parsnips into bite-sized cubes. Heat one tablespoon oil in a large skillet and cook the vegetables on medium-high heat until starting to soften. Add the beef and continue cooking until the meat is browned and the vegetables are cooked, about 5 - 10 minutes.
Stir in the tomato puree, allowing it to roast for a minute before pouring the chicken stock into the pan. Scrape the bottom of the pan with a wooden spoon to get the browned bits off. Allow the liquid to come to a boil before adding the canned tomatoes, Worcestershire sauce and ketchup. Simmer on medium-low heat for 5-10 minutes or until the sauce is starting to thicken. Transfer to a 9x13 inch casserole dish and allow to cool completely.
In the meantime, make the topping: Peel and dice the potatoes and cut the cauliflower into florets. Bring a large pot of salted water to the boil and cook the vegetables until tender, about 15 minutes. Drain well and mash with the milk and one tablespoon butter.
Preheat the oven to 420°F (215°C). Spoon the cauliflower topping over the cooled filling, smoothing with the back of a spoon. Chop up the remaining tablespoon of butter and dot it evenly over the topping. Bake for 25-30 minutes or until golden brown on top.