Actually (my bad explaining it) ut goes beyond that actually. See how it's used in CacheLoaderInterceptor. It uses this method to read existing metadata from the cache store and apply the metadata that's been passed in the call. This way, we're keeping all metadata except that if a version was passed as parameter, we apply it.

But, it's not specific to version only really. Metadata implementations might decide to copy more things from the template than just the version. The way the method is defined in the interface gives implementers the flexibility to decide what to keep from the template, based on the current value.