Для JVM идентичность класса складывается из полного имени и defining ClassLoader. Поэтому два загрузчика могут прочитать один и тот же com.example.User из одного байткода, но JVM получит два разных типа.
Так появляются ошибки вида User cannot be cast to User: имя в сообщении одинаковое, а ClassLoader-ы различаются. При диагностике полезно вывести value.getClass().getClassLoader() и загрузчик класса, к которому выполняется приведение.
Подробнее: ClassLoader-ы в JVM: Bootstrap, Platform, Application и parent delegation.