Hi Tom,
You shouldn't really stop a LabVIEW vi with the 'Abort' button on the toolbar, and the problems you are having is exactly the reason why - because it can leave hardware sessions in an unknown state which are difficult to recover from.
Instead, you should use the stop button instead, and the user should always stop the application in this way. You've already got one of these in your application, and are rightly closing the USB camera session correctly.
If you want the program to stop correctly in the event of an error, then you can use the 'unbundle by name' function on the error cluster inside your while loop (after the IMAQ USB Grab Acquire function), and unbundle the 'Status' part of the error. You can then 'OR' this with your stop button, so your program will stop if there is an error or if the user clicks the stop button.
I hope this helps, let me know if you have any questions.
Hannah
NIUK & Ireland