Mutagen's save() does not set or change cover art for MP3 files

The issue is coming about due to the ID3 specification stating that:

There may be several pictures attached to one file, each in their individual "APIC" frame, but only one with the same content descriptor.

This means that ID3 has to store APIC tags using ['APIC:Description']. In addition, the recommended way to add tags is not directly through the dictionary interface as in the example in the question, but using the ID3.add() function. Using the ID3 object also allows us to use the ID3.getall() function to check if the tag has been correctly attached.

from mutagen.id3 import APIC, ID3
file = ID3("test.mp3")

print(file.getall('APIC')) # [] (assuming no APIC tags attached)

with open('image.jpg', 'rb') as albumart:
    file.add(APIC(
        encoding=3,
        mime='image/jpeg',
        type=3, desc=u'Cover',
        data=albumart.read()
    ))

print(file.getall('APIC'))
# [APIC(encoding=<Encoding.UTF16: 1>, mime='image/jpeg', type=<PictureType.COVER_FRONT: 3>, desc='Cover', data=...]
file.save(v2_version=3)