If I understand correctly, the problem is that once things are saved, the flattened values aren't being copied back to orig_metadata.

That's because ```Metadata.copy``` is calling ```Metadata.rawitems```, which bypasses the custom methods in ID3Metadata.

So, I'd suggest changing the definition to:

```
    def copy(self, other):
        self.clear()
        for key in other.iterkeys():
            self.set(key, other.getall(key))
        self.images = other.images[:]
        self.length = other.length
```