Então eu tive que fazer isso da maneira antiga, desinstalar aplicativos recentes, reinicializar e ver se o Vista ainda trava durante o desligamento. Claro que seria legal ter um log de desligamento, assim como o log de inicialização, para ajudar a depurar isso!
Eu encontrei o culpado - Juniper Networks Network Connect 6.2.0 (caso contrário, um produto muito bom!) não é compatível com o Vista Ultimate SP2 / IE8. Oh bem - talvez o Windows 7 algum dia?