Preheat the oven to 180°C/gas mark 4. Heat the oil in a large frying pan, then add the onion. Fry for 4-5 minutes, until soft and golden. Add the garlic and cinnamon and continue to cook for 1-2 minutes. Add the spinach and allow it to wilt. Season and stir through the pine nuts and cranberries. Leave to cool.
Meanwhile, put the cranberry sauce and port in a small saucepan over a medium heat. Simmer until reduced to a sticky glaze.
Unroll the lamb and spread the stuffing over the whole surface. Re roll and secure with string in four places. Place the joint in a roasting tin and brush all over with the port glaze. Roast in the oven for 1 hour 10 minutes. Transfer to a board and cover with foil, then leave to rest for 10 minutes.
Meanwhile, pour the cooking juices into a jug and then return 2 tbsp of the juices to the roasting tin. Place over a gentle heat and add the flour, whisking thoroughly to form a paste. Add the port and stir well, then slowly add the stock, stirring continuously. Simmer until the gravy has thickened. Serve with the lamb and butternut squash.