Check your event log. See if there's a service throwing an error when the system is trying to shut down.
Sometimes this can be an issue where a program or service won't die properly when told to by the kernel.
If there's nothing in the event log to guide you to the correct service, it's going to be a long and arduous task to determine what it is.
Your next step would be to manually kill every process you can, one by one, before you shut the machine down. See which one makes the problem go away. It will take a LONG time as you'll have to likely do several reboots with each one to determine whether or not you've found the one.
Then, when that's done, you'll have to do the same with each service if the issue still isn't solved.
You would spend less time reloading the system than trying to pinpoint it, but it's your decision