What does it do when trying a shutdown?
If it hangs doing this, then how about changing through the init levels until you find which one is causing the issue:
Code:
init 4
init 3
init 2
init 1
init 0
EDIT:
When going to Run Level 0 the last two scripts to be called are:
S00killall
S01halt
The message "Starting killall" would be called at this point to shutdown any services that are still running. The fact that your machine is hanging at this point suggests that there are services that are still running that the script is unable to kill.
It may be worth adding a bit of logging to this script.