A dificuldade aqui é a combinação de 'respawn' com um script pré-stop que diz ao processo para parar. Do init (5):
respawn A service or task with this stanza will be automatically started if it should stop abnormally. All reasons for a service stopping, except the stop(8) command itself, are considered abnormal. Tasks may exit with a zero exit status to prevent being respawned.
A documentação é um pouco incerta sobre a questão de se sair com um status de saída zero deve causar um respawn. No entanto, fundamentalmente, você encontrou um erro inicial porque o processo principal que termina quando o objetivo é "parar" não deve resultar em uma mudança para "respawn".
Para contornar este bug, você deve ser capaz de usar a "saída normal" para dizer ao upstart que esta é uma maneira normal de parar o trabalho e que ele não deve reaparecer.
normal exit STATUS|SIGNAL... Additional exit statuses or even signals may be added, if the job process terminates with any of these it will not be considered to have failed and will not be respawned. normal exit 0 1 TERM HUP
Note que, em geral, seria mais robusto matar o processo com um sinal (especificando "kill signal N" se necessário) em vez de um processo de pré-parada que emite comandos; mas é claro que isso nem sempre é possível se o serviço não suportar o desligamento limpo após o recebimento de um sinal.