The flag that controls the enable/disable status of NCrunch when a solution has been opened can be found in the .ncrunchsolution file next to your .sln file:
<SolutionConfiguration>
<FileVersion>1</FileVersion>
<AutoEnableOnStartup>False</AutoEnableOnStartup>
...
</SolutionConfiguration>
When you manually enable NCrunch on a solution, NCrunch will set the AutoEnableOnStartup to 'True' in memory, then write this back to the file.
If you manually disable NCrunch, it will set the value to False and again, will write it back to disk.
Closing VS will create a shut-down sequence in which NCrunch won't adjust this flag. This is to prevent the annoying behaviour that you've described.
My theory is that NCrunch is having trouble writing this value to the file. Is the file read-only perhaps? Or locked somehow? Are you using a source control system that might prevent this from working? If so, it may be down to the simple action of checking the file out of source control, updating it, then committing with the flag set to True.