diff --git a/core/src/main/java/hudson/model/User.java b/core/src/main/java/hudson/model/User.java
index <HASH>..<HASH> 100644
--- a/core/src/main/java/hudson/model/User.java
+++ b/core/src/main/java/hudson/model/User.java
@@ -344,8 +344,12 @@ public class User extends AbstractModelObject implements AccessControlled, Descr
         if (u==null && (create || getConfigFileFor(id).exists())) {
             User tmp = new User(id, fullName);
             User prev = byName.putIfAbsent(idkey, u = tmp);
-            if (prev!=null)
-                u = prev;   // if some has already put a value in the map, use it
+            if (prev != null) {
+                u = prev; // if some has already put a value in the map, use it
+                if (LOGGER.isLoggable(Level.FINE) && !fullName.equals(prev.getFullName())) {
+                    LOGGER.log(Level.FINE, "mismatch on fullName (‘" + fullName + "’ vs. ‘" + prev.getFullName() + "’) for ‘" + id + "’", new Throwable());
+                }
+            }
         }
         return u;
     }
[JENKINS-<I>] More logging at FINE in hudson.model.User.
Running hypothesis: something historically saved a user configuration file with a bogus fullName;
thereafter anyone calling User.get(correctFullName) will get a User with the old fullName.
This would make the bug unreproducible in fresh Jenkins installations.