Well, I work with XML an awful lot of work, so here are my thoughts.

1. Why have you split up the different parts into different files? To my mind, you'd have a cleaner structure if you had just one or two files, with different sections, rather than distinct files. This way'd actually be slightly easier to work with programatically, too, as you'd only have to load a single file, and then obtain references to the appropriate XML nodes (which you'd do with multiple files, anyway).
2. In instruments/instrument/envelopes//envelope, I would suggest putting some sort of ID attribute on the nodes, and then referencing this ID from within loop and sustainloop -- an XML document isn't guaranteed to have a particular order, and you don't really want to be linked from the tick number.
3. Module/Volume -- move the attribute "mixmode" into a subnode.
4. Module/Tempo -- move the attribute "mode" into a subnode.
5. This is just me, but I think Module/Flags would be more logically named Module/Options (although yes, they are called 'flags' in the system, but 'options' gives you more semantic scope.

6. Patterns//Pattern -- you need some sort of unique identifier for each distinct pattern, too.
7. How are you referencing the actual sample files? I can't see it... Perhaps you need to include a URI node that points to Samples/{{blah.wav}} for each sample. Again, nodes aren't ordered...

8. Given that the samples are stored, is it necessary to store redundant information like the sample's bitrate, channels, and length?
9. Patterns need some method of ordering them -- a "seq" attribute, perhaps, going from 0 to
n.
10. Perhaps rename Workspace/Window/Tab to ActiveTab for clarity.