Right, so after spending some quality time with the LabView help file reading up on thread execution priorities and the like, I found out what the issue was. In LabView, if you view the Execution tab in the VI Properties dialog you can set the thread execution priority and "Preferred Execution System". The former appears to modulate home many CPU cycles your executing VI gets while the latter presents a set of execution modes for different types of programs (data acquisition, pure computation, etc.). We're interested in the latter item.
The default setting for this is "same as caller". This likely lead to the change in behavior I was seeing between LabView and .NET (LV probably runs VI's in a more responsive mode, .NET not so much). So, in the top level VI for my project, I set the execution system to data acquisition (not sure if this was the best option, but it's good enough), saved the VI and rebuilt the library. You only need to do the top level VI because, by default, you sub-VIs will be set to "same as caller" so they will inherit the change. With this done, VI behavior when run through .NET is consistent with that observed directly in LabView.