Vemos que esses dois processos estão relacionados (o pai do PID 1236 é 1234) e que o PID 1234 é o líder da sessão (minúsculas 's' no campo STAT).
Veja o link , onde vemos que os pipelines nos scripts de shell criam um novo grupo de processos.
Assim, acredito que o Upstart esteja executando seu script corretamente, e você está vendo dois processos por causa do tail ... | while read
pipeline.
Se eu puder sugerir uma pequena melhoria no seu script, você não precisará repetir todas as linhas contra o grep dentro do seu loop; em vez disso:
tail -F /var/log/vsftpd.log | grep --line-buffered 'OK UPLOAD:' | while read unused
do
curl http://some.url/
done