Looks good.
Here are some notes in case you get around to implementing this before I do:
I found it very surprising that no metadata handlers seem to implement
IWICMetadataBlockReader, while many of them advertise that they can be
found in other metadata formats. I'm guessing that metadata handlers
return child IWICMetadataReader objects from the IWICMetadataReader
interface, but I haven't tested this.
It probably doesn't make sense to reimplement GetEnumerator for each
decoder, and we should be able to make a common implementation based
on the other methods.
We should probably implement GetReaderByIndex based on
CreateMetadataReaderFromContainer, which I'm guessing expects a copy
of the image stream (using IWICStream because we can't use
IStream::Clone) seeked to the beginning of some metadata, or a region
of the image stream, maybe depending on the container format.