
Preheat the oven to 180°C/350°F (160°C fan). Spread the hazelnuts on a small tray and roast for 8 minutes, or until lightly golden. Let them cool, then roughly chop.
Finely chop the mushrooms in a food processor until they are in small, even pieces, about 3 mm. Do not puree.
Melt the butter in a large nonstick skillet over high heat. Add the eschalots, garlic, and chopped mushrooms, then cook for about 5 minutes, stirring often, until most of the moisture has evaporated.
Add the spinach and cook just until wilted. Transfer the mixture to a bowl and let it cool for about 20 minutes.
Stir the roasted hazelnuts, pistachios, parsley, chopped rosemary, and lemon zest into the cooled mushroom mixture.
Spoon the filling onto a sheet of plastic wrap and shape it into a compact log about 35 cm/13.5 inches long. Wrap tightly and freeze for about 3 hours, or until firm.
Place the deboned lamb shoulder fat-side down. Cover with plastic wrap or baking paper and pound it with a rolling pin or meat mallet until it forms an even rectangle about 40 x 22 cm and roughly 1.75 cm thick.
Season the inside of the lamb with half of the salt and black pepper. Unwrap the chilled stuffing log and place it along one long side of the lamb.
Roll the lamb up tightly around the filling, ending seam-side down. Tie the roast securely with kitchen twine at 2 cm intervals so it holds its shape while cooking.
Increase the oven temperature to 220°C/425°F (200°C fan). Rub the outside of the lamb with the olive oil and season with the remaining salt and black pepper.
Place the baby potatoes in a large roasting pan, season them with salt and pepper, and toss well. Set the tied lamb on top of the potatoes.
Roast for 30 minutes to brown the outside and start rendering the fat.
Reduce the oven temperature to 160°C/320°F (140°C fan) and continue roasting for 2 1/2 hours, or until the lamb is very tender. The meat should reach about 98°C/208°F internally or pull apart easily with two forks.
Transfer the lamb and potatoes to a tray and loosely cover with foil. Let the lamb rest while you make the gravy.
Pour off excess fat from the roasting pan, leaving about 3 tbsp of fat along with the browned meat juices. If there is not enough fat, add a little butter.
Set the roasting pan over medium heat on the stovetop. Sprinkle in the flour and stir for 1 minute to cook out the raw flour taste.
Gradually whisk in the beef stock, then add the dark soy sauce. Simmer, stirring often, until the gravy thickens to a pourable consistency. Taste and adjust with salt and pepper if needed.
Remove the kitchen twine from the lamb and slice the roast into thick rounds, about 2 cm each.
Arrange the sliced lamb on a serving platter with the roasted potatoes. Spoon over some gravy and serve the rest on the side. Finish with extra pistachios if you like.