Если вы сравниваете делегатов, вполне вероятно, что, особенно если вы используете лямбда-выражения или анонимных делегатов, их RuntimeTypes различаются.
Я бы посоветовал вам переопределить метод Equals для этих типов вручную для каждого типа. Вы, вероятно, испытываете снижение производительности при выполнении этих сравнений на основе рефлексии, и вы всегда будете сталкиваться с этими небольшими придирчивыми проблемами.
Я знаю, что такое чувство, что вы должны быть в состоянии решить раз и навсегда, но это маловероятно. Надеюсь, это не слишком пускает ветер с твоих парусов.