Unfortunately, it appears that the implementation is horribly limited in that it cannot make an arbitrary number of modifications to the same value in a single update. Take the example below, where we attempt to insert one node for every value in @IntData (3 total) into the xml column of our first row in @XmlData.
As you can see from the output, the cross join returns 3 records but the update only inserts one node. The only way around this is to use a cursor, which is a shame. Here's hoping that they fix that up in SQL 2008.