Thanks for these extra details. I think I understand what is happening here.
The 'Run pinned tests automatically, others manually' default engine mode is configured with a config setting override that will automatically pin a test when it is newly discovered.
When you switch branches, this causes NCrunch to discover a bunch of new tests (that happen to exist in the branch being switched to, but not in the previous branch). This then results in the new tests being pinned.
NCrunch itself doesn't have knowledge or handling of things like branch switches. As far as the synchronisation system is concerned, it's just a bunch of changes. So we don't have a way to discriminate between tests that are actually newly created compared with tests that have reappeared as a result of branch switch.
For the way you're working, the easiest options may be to edit the pinned test engine mode to remove the config setting override. As long as you adjust the Tests Window filters to make sure that new tests are listed, you can simply pin them manually as they show up. Child tests will automatically inherit the pinned status from their fixture, which may also help with auto-pinning when writing new tests.