Thanks for sharing this. I've done some basic testing with the NUnit features you're using here (async, descriptions, SetUp, TearDown, etc). I haven't been able to recreate any problems, so I think we need to take a deeper look at what may be happening in your environment.
My first thought was that the problems you're experiencing may be caused by unexpected asynchronous behaviour in the NUnit environment. This was the source of many of the earlier problems in NUnit3 integration, as NUnit3 is heavily multi-threaded and has a number of features that prevent tests from running synchronously. For tests to work in NCrunch's environment, all async behaviour must be disabled so that the coverage tracking and test boundaries can stay consistent.
Something that would be useful is if we could grab a log from a faulty NCrunch test run on this project. If you set your 'Log Verbosity' (global NCrunch configuration setting) to 'Detailed', and inspect the test tasks inside the NCrunch Processing Queue, you'll notice that they emit trace information about the test run. If you can share some of this data with me (either by posting here or submitting through the contact form on this site), there may be some useful data we can use.
I'd also suggest taking a look at anything in your project that might influence NUnit's behaviour outside of the code you've shown here, such as settings inside your app.config that are targeted towards NUnit, or assembly-level attributes. Of particular interest is anything that might cause NUnit to work asynchronously.