I have what is I imagine a common scenario, but am having trouble getting things working completely.
The scenario is quite simple, I would like to perform a major up
This should just work (putting aside the Delete for now), but without knowing where you have the RemoveExistingProducts action for your upgrade it's not clear what's going on, especially if you are adding conditions and your StopService isn't working for some reason. However what's the issue with DeleteServices? If the service isn't running anyway the momentary effect on the system is minimal. Are you trying to preserve something about the service that was added later, like an account? If that is what you're doing there is an issue because repair probably fails.
Anyway, if your REP is at the end, then the simplified sequence of events as it applies to your service is something like:
Incoming install stops the old service, deletes the service, installs any updated files, installs the service again and starts the new service.
The REP afterwards stops the service, doesn't delete it because it's ref counted, then starts it. But there is one momentary delete, so the issue is why the stop doesn't work, and the question is what's so bad about the delete?