Thanks this gives us some good information to work with. I think this issue is being caused by the code under test
overstepping the test boundaries with multithreading. I haven't seen a multithreading issue take down an entire process before, but there is a very broad range of problems that can happen if code is still being executed after the test has completed. The .NET TCP components are themselves built over unmanaged code, so it's possible that something is bombing out on cleanup in a really messy way.
The use case you're testing for (i.e. client/server connections) is notoriously difficult to isolate with good tests, because the connection handling between client and server generally has many race conditions that can be hard to pin down. Make sure the connections are being closed in a carefully determined sequence and that all events have finished firing by the time the test completes. It may be necessary to add a Thread.Sleep at the end of the test. You might find it's possible that other test runners won't show this problem because they generally tear down the test process immediately on completion of execution (where NCrunch will keep it alive for as long as is resource-efficient).