ClassLoader проблема наверняка.Скорее всего, приложение было повторно развернуто (таким образом, был создан новый экземпляр загрузчика классов), но старый объект оставался либо в (диск-сериализованном?) Сеансе, либо в памяти.
Имя класса такое же, но экземпляр загрузчика классов другой.Instanceof рассматривает полное имя класса и равенство загрузчиков классов.
PS На самом деле это довольно распространенная проблема.Это часто видно, когда фоновый поток просыпается только для того, чтобы узнать, что приложение было повторно развернуто, загрузчик классов потока пропал, а затем он выбрасывает либо NoClassDefFound, либо ClassCast для большого удовольствия разработчиков, которые не всегда понимают, что это на самом деле зомби изпредыдущее развертывание, и пытается найти ошибку в их коде.