Ok, this is all making sense now.
Broadly, there are two ways to represent a theory:
1. By splitting each test case of the theory independently, resulting in many 'tests'
2. By treating the entire theory as one 'test', and rolling all the results up into this one test.
When working with Xunit v1, NCrunch will use the second method. This is because of the way that the Xunit adapter inside Gallio works.
When working with Xunit v2, normally the first method will be used, although in some scenarios Xunit will override this behaviour and use the second method (for example, if the test-case parameters contain custom classes that can't be used to represent the test name under static analysis).
In this situation, you're compiling against Xunit v1.9.2, so the results are as expected. I recommend upgrading to Xunit v2 if you'd like to see better granularity in your test case reporting.