NCrunch contains cleanup code that spawns a taskrunner process which waits for devenv.exe to exit before it fully terminates. This is part of the intended behaviour (to make sure that workspaces are fully cleaned up on exit). A side-effect of this behaviour is that it can make NCrunch appear to be preventing devenv.exe from closing, where actually devenv.exe is preventing NCrunch from closing, if this makes sense.
I'm not saying with certainty that NCrunch isn't to blame, as there have been a history of problems in this area (although no known such issues still exist). If you have time, I'd recommend you try uninstalling NCrunch and experimenting with your IDE to see if the devenv.exe process continues to hang around after termination without NCrunch loaded. This is a VERY common problem for VS packages/plugins in general, as reliably managing cleanup during VS termination is difficult to do.
Otherwise, a useful way to gain more information about the lockup is to attach a debugger to the hung devenv.exe process and examine the list of running threads. Do you see recognisable namespaces in the stack trace for any of the running threads?