Preheat the oven to 180°C (350°F).
Make the tomato sauce: put the whole peeled tomatoes and halved white onion into a heavy-based pot. Squash the tomatoes with a potato masher or knife, add 40–60 g butter, a few pinches of sea salt and some black pepper, then simmer gently for 45 minutes. Remove and discard the onion halves, then keep the sauce warm.
Cook the spinach in a large pan or pot until wilted. Drain well, cool slightly, then roughly chop and squeeze out excess liquid.
In a large non-stick pan, heat 2 tbsp olive oil over low-medium heat and gently cook the finely chopped red onion for about 5 minutes until softened but not browned.
Add 2 tbsp butter and the minced garlic to the softened onions and cook for about 1 minute until fragrant.
Stir in 2 tbsp flour to make a roux and cook briefly, then add the milk slowly while whisking until smooth. Add a little more milk if the sauce is too thick and cook until the flour has cooked out and the sauce is thickened.
Add the chopped spinach to the white sauce, season with salt, pepper and 1/4 tsp grated nutmeg, and stir until the mixture is a fairly thick, paste-like texture.
Remove the pan from the heat and stir in 250 g ricotta and 3 tbsp grated Parmesan until very well combined; cool the filling slightly so it is safe to handle or pipe.
Line the base of a baking dish with a thin layer of the tomato sauce and scatter the shredded basil leaves over it.
Transfer the spinach and ricotta filling to a piping bag and snip a hole slightly smaller than the cannelloni diameter. Hold one end of a tube closed with your hand and pipe the filling into each cannelloni until filled. Place the filled tubes snugly in the prepared dish.
Pour the remaining tomato sauce over the filled cannelloni. Scatter or arrange the torn/sliced mozzarella over the top and drizzle a little olive oil over the cheese. Loosely cover the dish for the first 20 minutes of baking to prevent over-browning.
Bake in the preheated oven for about 1 hour, until the cannelloni are cooked through and the top is golden; remove the cover for the final baking time if desired.
Allow the bake to rest briefly, then serve scattered with extra fresh basil if desired.