O problema (ou pelo menos um problema) é que você está usando o -d flag do docker (para "desanexado") no seu ExecStart= .
O systemd espera que o comando que ele executa permaneça em execução enquanto o serviço está ativo, em outras palavras, para ser executado em primeiro plano. Pelo menos ao configurar serviços de Type=simple , que é o tipo padrão e o que se aplica à sua unidade.
Quando você está executando um comando que sai imediatamente (como docker run -d ), o systemd assume que seu serviço é iniciado e permanece ativo apenas por um momento, até que seja concluído. Então, enquanto o seu contêiner ainda estiver ativo, o serviço systemd vai achar que não. Você pode confirmar isso com um comando como systemctl status consul.service . (Verifique este comando com frequência para ajudá-lo a entender o que o systemd acha que o status do seu serviço é. Poste sua saída aqui para nos ajudar a diagnosticar quaisquer outros problemas que você esteja tendo também.)
O que está lhe causando problemas quando você tem alguns comandos ExecStopPost= é que o systemd executará esses comandos, já que ele supõe que o serviço está terminado, matando assim o seu contêiner.
Basta remover o -d de seu docker run no comando ExecStart= para resolver seu problema.