Maybe I could help with a more stable procedure to get out of this situation, but I don't remember if it worked perfectly each time I needed.
1st, I realized that a software reboot (from MAX, or from project explorer window) is not as effective as a power Off reboot.
Then, I have a feeling that when an Exe run at startup, and we stop it when deploying a VI, some badly released things (classes, libraries,...) may affect the deployment.
Knowing that, the procedure is:
1 - Unset you StartupExe as startup.
2 - Power off reboot your controller
3 - Deploy your VI
I hope this could help
I'm fighting this issue currently as well. I am getting a mix of deployment completed with errors, vi loaded with errors on the target, and a message that one of my vis is broken. When I navigate to the 'broken' VI, the run arrow does show as broken, but the VI isn't actually broken - if I click the run arrow the error list that pops up shows nothing is broken. Mass compiling fixes the broken run arrow, but the next attempt at deployment usually results in the same problem again - deployment completed with errors, or vi loaded with errors on the target. (Usually a different VI.)
I am using lots of classes and the actor framework, and one VI that I have noticed that is regularly reported as being the vi with errors is an override of receive message, which simply logs the incoming message and then calls the parent method. I've removed my logging call, and kept the override that simply calls the parent method, but I still get the error. If I attempt to run this VI directly, LabVIEW usually crashes.
I have also noticed that closing the project doesn't actually clear the project items out of memory - I can close the project, then reopen and the project opens instantly (it usually takes 20+ seconds to load everything on first load) and will show as already being connected to the target.
To others that have had this issue, were you able to build and deploy and executable to your target correctly? I am able to build my exe and deploy, but I am seeing weird behavior with my code that I am not 100% sure if is caused by my code, or by some build/deployment issue.
My deployment issue was solved by removing all VIs from its DQMH lvlib and adding them back (and saving a whole bunch of files twice). Closing LabVIEW and clearing the compiled object cache was not necessary for me. Credit for this solution goes to joerg.hampel. Maybe this could be applied to your actor.
Regarding the project staying open in the background after closing: For me it was unrelated to the deployment issue at hand. I can close the project file normally after removing FPGA from the cRIO project (have a separate project just for FPGA now). I got it from this thread: https://forums.ni.com/t5/LabVIEW/LabVIEW-Bug-When-Sharing-Module-Timebases/m-p/3895817