Example from a newsletter:

Subject: =?UTF-8?Q?Neuer_SPD-Generalsekret=C3=A4r_?=
 =?UTF-8?Q?Kl=C3=BCssendorf_warnt_Union_vor_?=
 =?UTF-8?Q?Konflikt_bei_Migration?=

puts [::mime::field_decode [::mime::getheader $mime_data "Subject"]]
results in

"Neuer SPD-GeneralsekretärKlüssendorf warnt Union vorKonflikt bei Migration"

it should be
"Neuer SPD-Generalsekretär Klüssendorf warnt Union vor Konflikt bei Migration"

Note that the whitespace is part of the encoded word.
A quick-fix for me (may break some other case) was to switch order while decoding:

@@ -2537,18 +2537,18 @@
 proc ::mime::qp_decode {string {encoded_word 0}} {
     # 8.1+ improved string manipulation routines used.
     # Special processing for encoded words (RFC 2047)
-
-    if {$encoded_word} {
-        # _ == \x20, even if SPACE occupies a different code position
-        set string [string map [list _ \u0020] $string]
-    }
-
+
     # smash the white-space at the ends of lines since that must've been
     # generated by an MUA.

     regsub -all -- {[ $string \n string
     set string [string trimright $string " \t"]

+    if {$encoded_word} {
+        # _ == \x20, even if SPACE occupies a different code position
+        set string [string map [list _ \u0020] $string]
+    }
+
     # Protect the backslash for later subst and
     # smash soft newlines, has to occur after white-space smash
     # and any encoded word modification.