Para depurar esses tipos de problemas, geralmente é necessário chamar o instalador a partir da linha de comando e ativar o registro:
msiexec.exe /i TheInstaller.msi /log C:\SomeFolder\InstallLog.log
Se você procurar no arquivo de log, poderá ver a fase de instalação específica que está ficando retida e diminuir o problema a partir dali.
No passado, tive um problema em que um instalador de um dos produtos em que eu estava trabalhando passou vários minutos em uma das fases finais. Acontece que eu tinha vários arquivos grandes de despejo de memória nas minhas pastas .NET GAC (devido a um bug neste produto em particular) e o Windows Installer não parecia gostar disso. Depois que eu deletei esses arquivos, o problema desapareceu.