I have a Windows service set up to manage custom .Net tasks. Organization is:
-Windows Service monitors a schedule and starts a worker .exe as needed.
-Worker .
I can't add a comment on your post yet (I'll be destroyed by other stackoverflow user for doing that but...)
I encounter a problem quite similar to yours. My problem was coming from the Session where the service is Started. During the migration, the service started in a "Session 0" in the new OS and not as a "system" program. It was issuing with the permission of our program to run through the service. Maybe you should check this point.
Sorry if I tell it as an answer and not in comment