Один и тот же класс / тип, загруженный разными доменами приложений [.NET] или загрузчиками классов [Java], не будут сравниваться одинаково и не могут быть назначены друг другу напрямую.
Скорее всего, у вас есть две копии библиотеки DLL, содержащей этот тип - одна загружена основной программой, а другая - одним из Assembly.Load*(...)
методов?
Попробуйте отобразить / сравнить свойства:
a.Assembly.Equals(b.Assembly)
и
a.Assembly.Location.Equals(b.Assembly.Location)
Как правило, вам нужна только одна копия каждой библиотеки DLL и ее загрузка в один домен приложения.