That's very similar to what we're thinking of doing. What we're looking at is loading the XML the first time and then saving it as a binary blob where it only changes if the checksum changes.
I realize I'll sound like a smart ass here, but I'm surprised you haven't considered that earlier since you've been using Python. Python scripts work pretty much that way; i.e compile .py file to byte code on first run, dump that in a .pyc file and use that as long as the original python file is not modified.
On a side note, I was a little surprised that you went for XML. I realize XML is pretty straightforward to use thanks to the wide range of available parsers out there but, it's also pretty slow. Besides, isn't it a little overkill for what you're trying to achieve? It seems you only use a small fraction of the XML syntaxic power.
Besides, if the main objective of this data format is moddability and ease of use, well, I can't think of a less human-friendly format than XML, short of binary data. It's verbose, ugly, unforgiving and it's just a pain to edit. Did you consider JSON or YAML? I would have found them easier to use. And they might be faster to parse than XML, but only benchmarking could validate that assumption. Of course, the modding tools provided in Elemental may reduce the need to manually edit XML to almost zero in which case my point is moot.