You could also test this by using a print line in the OnPlayerDisconnect, and in the OnGamemodeExit to see what is shown.
If OnPlayerDisconnect isn't called, you could make a shutdownserver function that cycles through the players saving them, and all the data on the server, then shutting down with a countdown so you can keep your players notified, and so it's a bit more obvious.
Like freezing players as it's about to restart, with a textdraw message notifying them of the shutdown, and stating everything is being saved, and to reconnect when they do end up kicked off.
It's impressive that you also thought of OnPlayerDisconnect as well.
And yes, you do need to use that bat file if you've used the goto start method. And when you really want to shut down the server, fully, you'll have to get into the desktop, and stop it by ctrl-c, or closing the window (AFTER the server has shut down, and before it starts up again).
You could put a 30 second sleep in the batch file, so it'll give you time to stop the startup of the server, before it starts the server.
For example
will make the script wait for 30 seconds, so you put that between the start line, and the server exe line, and it'll give you time to stop the startup if you need to do anything more substantial.
When it's counting down, you can hit a key to instantly start the server, or just close the window and it will stop the bat file. As long as the server isn't starting, this shouldn't be a problem.