Em que circunstâncias, precisamos ligar para o GC.Collect duas vezes

Temos um aplicativo WPF, baseado no Unity com padrão MMVVVM. No ciclo de vida do aplicativo, pode haver vários ciclos de vida do projeto. Após cada ciclo de vida do projeto, fazemos um Tear Down manual e tentamos liberar toda a referência do ViewModels. Para assinaturas de eventos com o Unity, estamos usando referências fracas. Portanto, assumimos que, após o desmonte, poderemos chamar GC Collect, para que todos os objetos de lixo sejam coletados. Temos outra opção de cancelar a inscrição manualmente de todos os eventos, mas estamos preferindo a coleta de lixo, porque ela liberará cerca de 200 MB para nós, o que facilitará o carregamento do novo projeto.

Com uma instância, estamos observando que, se eu chamar GC.Collect apenas uma vez, sua referência ainda permanece na memória por algum tempo.

GC.Collect();
GC.WaitForPendingFinalizers(); 

Mas se eu tentar ligar para o GC duas vezes seguidas, ele limpa tudo muito bem.

GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();

Quaisquer pensamentos ou sugestões serão muito apreciados.

Atualizar:

Não há Finalizadores definidos na Classe.

Agora também estou considerando um caso em que esse objeto é referido em outro objeto que pode ter um finalizador. Em Nossa estrutura, temos finalizador apenas para DBProvider, então eu não acho, mesmo esse é o caso.