Hi, thanks for sharing this issue.
Because of the design of the engine and the limitations of the frameworks we integrate with, we can't have NCrunch simulate the process hosting behavior of a serial test runner without axing many of the features that make it worth using. Marking the tests with ExclusivelyUsesAttribute will help here as it will increase the odds that they share the same process due to the re-use patterns, but there is no specific way to override the manner in which the engine allocates and re-uses processes outside of IsolatedAttribute (which is likely too targeted for your situation).
If you have a way of moving these tests into a separate test assembly, this will help you, as the test assembly/project itself is a determinant in whether the engine can re-use a process when starting an execution task. As you can imagine, each test process launched by NCrunch is set to target a specific project. There is no way the engine can take a test process that was launched for one test project and re-use it for another. If your process pool is large enough and you have all tests in the new test project set to make exclusive use of the same resource (via ExclusivelyUsesAttribute), you can effectively force the engine to only have one test process for these particular tests that cannot be used for any others. In theory, this should create the result you are after.
Note that you may still need to implement a static state flag to prevent the Xunit test collection setup from running multiple times in the same process. I would expect that it probably gets called by Xunit every time NCrunch invokes the test runner to run a new batch of tests, which doesn't seem like something you'd want.