A quick comment on the code - if you are getting the ActiveX control from the front panel, you do not need to call Automation Open - the refnum returned by the container itself onto the block diagram is the instance created by LabVIEW on your behalf. Similarly, you don't need to close it either - the VI controls the life of the control.
If there is no reason to display it on the front panel, convert it to a ActiveX refnum constant and leave the Open/Close alone.
The other thing to do is go into the VI Properties and select "Execution". Change the Preferred Execution System from "same as caller" to "user interface". My guess is that when you run it as the top VI, it's defaulting to the UI execution system (typical) and everything is working fine. When you call it as a subVI, it's scheduled by the execution system to run on an available thread, which probably isn't the UI one. I'm guessing that your control requires that the caller be the UI thread.