At some point a while back, I analyzed the data structures used in forming the timezone objects and found that there was a lot of redundant structures, particularly in cases where you were loading a large number of zones. I hacked the data structure to re-use common references whenever possible and this made a significant difference in the total size used when many timezone objects were loaded, but not much (in fact none) when only a single zone was used.
I'll see if I can find my work. I was using Data::Dumper for the trickery, but I'm sure it could be switched over to Storable. I have no idea regarding the specific problem with the XS apparently using more memory. Matt