The best resources I found to get my head around UAC is Robert Flaming's blog , he got a series of about 25 posts that explain how Vista, UAC and MSI interact.
Vista will always ask as soon as it gets into InstallExecuteSequence if you are installing on a machine (ALLUSERS = 1), however, if you have an installer that requires upgrading beyond this sequence, then the best solution would be to use a bootable EXE instance with a manifest indicating that elevation is required when starting exe.
Indigo Rose ( , MSI Factory), NSIS, Visual Studio one, SDK Windows