Here is my opinion:
1. Using stand-alone EXE to automate AutoCAD is hardly a good solution in many situation (maybe, unless the task is very simple), considering you are limited to use COM API only. And also considering you need to have AutoCAD installed, you can have almost the same UI and user experience to run the process inside AutoCAD, which is a lot faster and you have more choice of programming API (namely, you can use Acad's .NET API).
2. If you insists doing out-process automation, do not try to hide AutoCAD instance as invisible to cheat yourself that AutoCAD is running "in backgroud". In term of software, "running in backgroud" usually mean running in another thread. In your case, even AutoCAD instance is invisible, it is not iin another thread, itr is still hold your EXE app waiting each call to AutoCAD to be completed. AutoCAD is a very complicated desktop app, there is many chances that AutoCAD would be held and wait for user input. ot to mention that our code to automate AutoCAD very likely causes one of these chances. That is probably the reason your app behaves so inconsistently. Have you checked in Task Manager to see if you have running AutoCAD session(s) stuck in memory? IMO, you'd better to explicitly to set AutoCAD instance visible (at least before your app is thoroughly debugged - well, who can clain his/her app is thoroughly debugged and completely bug-free?), so that you can actually see what is happening with AutoCAD when your code is running.
3. If your task is only manipulate drawing data as you described, you can use Object DBX, so that the drawing is not actually opened in AutoCAD editor visibly, these would eliminate some possible AutoCAD poping up warnings/messages and reduce the chances that AutoCAD stopd for user interaction. Ideally, you could lisence RealDwg to manipulate drawing data without the need of installing AutoCAD, if the development can justify the prohibitive lisence fee.