Не думаю, что InvokeRequired может зависнуть. BeginInvoke может, но я не думаю, что это будет.
Мало идей.
BeginInvoke работает правильно, но поток пользовательского интерфейса занят, поэтому он никогда не переходит к выполнению OnModuleInitializationComplete. Что этот поток продолжает делать? Начинается ли ожидание (например, вызов EndInvoke) как какой-то момент?
InvokeRequired возвращает false, а ваш метод CheckIfAllModulesInitComplete зависает.
Я бы добавил дополнительные записи в OnModuleInitializationComplete, чтобы показать путь, по которому они прошли, а затем обновите ваш вопрос новой информацией.
Если вы также можете предоставить немного больше информации о коде этого метода, это может быть полезно, особенно в любом месте, где будет ждать завершения этого метода.