Ok - that narrows things down a bit. The next thing we should check is the behaviour of the tests in the processing queue. If you set the filters on the queue to show only executing tests, and turn on the 'Exclusively Used Resources' column, do you see any evidence of the engine running tests concurrently that make use of the same resource?
The area of the engine that handles resource locking is very mature and hasn't seen any work for a long time, so I think there may be more going on here. Something that hits my mind is the nature of database connectivity. If you have a test that holds an open database connection (perhaps including locks on database tables or resources) after its execution has completed, this can create a concurrency problem for NCrunch ... as NCrunch will not be aware of the locked resource and will simply execute the next test, possibly inside a different test process.
ADO.NET often tends to pool database connections, which means that it could still be possible that the test process is holding open connections to the database after its tests have finished executing. Off the top of my head I'm not aware of any situations where a SQL server database would retain locks using a connection stored in the pool, but there's quite a bit that can go on here and I'm not sure what kind of database you're working with.
Something that may help with such an issue is to try setting the
Test process memory limit to '1'. This will cause NCrunch to terminate each test process after it's finished an execution run, which may help break up resource locking. Because this will stop NCrunch from re-using test runner processes, it will also reduce the engine to a crawl - so it's probably only useful in helping to further narrow down the problem.