Я нашел способ сделать это. Я добавил следующее в файл plist.
Вместо
<key>KeepAlive</key> <true/>
я сделал это
<key>KeepAlive</key> <dict> <key>SuccessfulExit</key> <false/> </dict>
Если установить для KeepAlive значение false, это вообще помешает началу работы. (Предположительно, он ждал вызова от кого-то.) Но статус KeepAlive также можно определить во время выполнения. Эта служба теперь перезапускается автоматически, когда она завершает работу без уважительной причины (то есть, когда она убита), но не когда она завершает работу по какой-либо причине (то есть регулярно отключается). Это то, что мне нужно.