Acredito que esse problema tenha sido causado pelo próprio serviço, mas há uma solução alternativa com o comando "SC query".
C:\Windows>sc query "MyService" | find "STATE"
STATE : 3 STOP_PENDING
É possível anexar uma rotina de verificação em seu arquivo de lote para verificar novamente o status do serviço após ter algum intervalo, eliminar o processo de serviço (taskkill / f) se ele estiver suspenso e reiniciar o serviço (net start).
Além disso, se você usar o NSSM para ocultar a janela, não precisará usar o NSSM e poderá atingir o mesmo objetivo apenas com o Agendador de Tarefas. (Mas se você apontar algo diferente - por favor, ignore o seguinte.)

Estaéumapartedaguia"Geral" na propriedade da tarefa. Se você selecionar "Executar se o usuário está conectado ou não", isso será executado a partir da sessão 0, que não mostrará nenhuma janela para você. Então, o que você precisa fazer na sua tarefa agendada é matar / reiniciar o próprio processo de destino como você faz agora. Isso funcionará de forma mais robusta.