Вместо использования DirectoryCatalog используйте AggregateCatalog. Вам нужно будет написать код, который просматривает все сборки в каталоге модулей, выясняет, является ли текущая копия дубликатом уже обработанной, и если нет, создает AssemblyCatalog для этой сборки и добавляет его в AggregateCatalog.
Я не уверен, какую именно логику вы могли бы использовать, чтобы обнаружить, что две DLL с разными именами являются "одной и той же" сборкой.