To make the paneer, line a sieve with a large piece of muslin and place over a bowl. Heat the milk in a large heavy-based pan over a medium heat. Gently bring to the boil, then reduce the heat to a gentle simmer.
Gradually add 4 tablespoons of lemon juice, stirring continuously so the curds and whey separate. Carefully pour the mixture into the sieve so the curds collect in the muslin. Place under cold running water to get rid of any whey, then gather up the muslin and squeeze out the excess moisture. Keeping the muslin bundle in the sieve, cover it with a plate and top with a few heavy weights (a couple of tins work well). Place in the fridge for 1 hour 30 minutes to set.
Once set, cut the paneer into 2cm chunks. Heat a lug of oil in a large non-stick frying pan over a medium heat, add the paneer and fry for 5 minutes, or until golden, stirring frequently. Using a slotted spoon, transfer to a double layer of kitchen paper to drain.
Peel and finely chop the onion, garlic and ginger. Return the pan to a medium-low heat, adding a splash more oil, if needed. Add the cumin seeds, fry for 1 minute, then add the onion and cook for around 8 minutes, or until softened. Stir in the garlic, ginger, garam masala and turmeric. Halve, deseed and very finely chop the tomato, add to the pan and cook for a further 10 minutes, or until softened but not coloured, stirring occasionally.
Stir in the frozen spinach, cover and cook for 5 minutes, then stir in the cream, paneer and a splash of boiling water. Reduce the heat to low and cook for a further 5 minutes with the lid off, or until reduced to a deliciously creamy consistency. Season to taste and serve immediately.