Firstly, ItemGroups are evaluated when the script is initially run (or something along these lines) - which in retrospect seems completely obvious. This means that if you want an ItemGroup to contain items from a build output (i.e. MSIs) then you have to create the ItemGroup via the CreateItem task. Basically, the ItemGroup is evaluated when you call the CreateItem task.
An example:
...
...
The second problem I had to overcome today was that I wanted MSBuild to transform my T4 templates. I'm currently using T4 to generate my config files as per Oleg Sych's posting at http://www.olegsych.com/2007/12/how-to-use-t4-to-generate-config-files/. This isn't really that hard to accomplish and can be done as follows:
C:\Program Files\Common Files\Microsoft Shared\TextTemplating\1.1\TextTransform.exe
..\Construction\
I'm also using the MSBuild Community Tasks (http://msbuildtasks.tigris.org/) in the last sample script. This is to make sure the config files that are checked out are writable. The Attrib task can be used to easily change file attributes.