Как говорили другие, когда вы вызываете net stop, он вызывает OnStop в службе Windows. Если OnStop не уничтожает все потоки в приложении или не закрывает все должным образом, ваша служба может не остановиться. (Я видел, как это происходило в одном из наших сервисов WCF: мы не закрывали ServiceHost в OnStop, и поэтому приложение не остановилось по нашей команде - нам пришлось бы убить процесс вручную.)
Один из распространенных шаблонов, которые я видел, - это попытка вызвать останов службы, а если она не прекратит работу в течение тайм-аута (10 секунд), принудительно завершить процесс. В качестве альтернативы пакетным файлам PowerShell имеет довольно хорошую поддержку для работы со службами.