Paul,
I am a huge fan of this invert strategy! In fact, I think that it would be super easy. We could simply attach a MaterialLibrary instance (called mats?) to PyNE Mesh class keyed in the way you describe. This is great because all of the pieces are there. It also adds some umph and impetus to use the PyNE Mesh rather than just the MOAB mesh. It is no longer a thin wrapper around the MOAB interface.
The other thing that this solves is the persistence problem. The PyNE mesh would have a write_hdf5() method which calls the MOAB mesh HDF5 writer and the MaterialLibrary.write_hdf5() method.
Of course, we'll have to inform our analysis and viz tools (yt) where the different fields live, but that shouldn't be too hard. Alternatively, we could expose a PyNE Mesh-level interface for grabbing 'tags' from the appropriate place. And of course, none of this stops us from dumping everything to MOAB tags if we need to too.
I think that this is the right thing to do.
Be Well
Anthony