IEqualityComparer<T> используется в коде с обобщениями (generics).IEqualityComparer<T>, то при сравнении ключей-структур постоянно бы происходил боксинг, что не очень эффективно. (У простых структур всё-равно будет боксинг, чтобы его не было надо реализовать IEquatable).IEqualityComparer<T> мало, есть более лаконичные вариант для Equals и GetHashCode.
Для чего он нужен. Если достаточно переопределить Equals, GetHashCode?