You need to validate your service logic in the code, you have a error there. The error is not within the Windows OS.
My guess is that the service start a new process and it die after and let the kid process alive, thus it allow you to start a new service instance, but it should not do that.
To explain it; The service register itself to the Service Controller (SC), and after it register itself to control the service start, stop and restart.
In your code, you can validate the service status and set the STATUS so windows know where your service is at; ie when the service start;
g_ServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP;
g_ServiceStatus.dwCurrentState = SERVICE_RUNNING;
As you can see the winmain of a service is not the same as a normal application as it handle the main code when the service is started by SC and it stay open, as if the process die then you can issue another net start for your service.
See an example there; https://www..com/Articles/499465/Simple-Windows-Service-in-Cplusplus
So in resume if SC allow you to re-issue a service net start, and don’t return you an error ´the service is already up, can’t start’, then your service died, no GPO or anything can help you there