I have moved the LockObject declaration in my oApp class, which is Shared. This seems to be much better. Basically, the following attached file demonstrates this logic.
By looking at it, you will see that a lot of hits happened in the same second when I sent a new DLL. However, only one hit (represented here by the file name - ordered in sequence), got into the initialization process. All other hits fall into a pending mode and jumped directly to the end once the lock was released, thus oApp.lInitializeWeb was then set to True.