You're using /opt/kiosk.sh as your session file for startx. Because that script has an infinite loop coded into it, your script is going to reopen the browser every time it's killed.
Instead of using while true it may be better to perform a check to see whether that service is shutting down. Unfortunately, I'm not familiar enough with upstart to know what test condition would determine when the system is shutting down. Something like this new while loop might suffice (this replaces the one in the kiosk.sh script):
while [[ $(status kiosk) != */stopping* ]]
That loop waits for the status kiosk command to return a string containing "/stopping" and terminates the loop when it does.
I hope someone with more experience in upstart can correct my implementation. :)