It happens quite often (e.g. if Hudson got a OutOfMemoryError) that after stopping it with the init script the process ist still there.
Another try to stop it results in an error, since the PID file has already been deleted.
It would be good, to monitor the termination of hudson and if it didn't within a certain time (e.g. 30s) then kill it (maybe it is required to kill both java processes that are running).
There are several other init scripts which already show how to do this - e.g. the tomcat init script on Ubuntu.