Interseca con un IEqualityComparer personalizado usando Linq

Larga historia corta: tengo 2 colecciones de objetos. Uno contiene buenos valores (Llamémoslo "Bueno"), los otros valores predeterminados (Sr. "Predeterminado"). Quiero la Intersección de la Unión entre Bueno y Predeterminado, y Predeterminado. En otras palabras: Intersecar (Unión (Bueno, Predeterminado), Predeterminado). Uno podría pensar que se resuelve como Predeterminado, pero aquí es donde se vuelve complicado: uso un IEqualityComparer personalizado.

Tengo las siguientes clases:

class MyClass
{
    public string MyString1;
    public string MyString2;
    public string MyString3;
}

class MyEqualityComparer : IEqualityComparer<MyClass>
{
    public bool Equals(MyClass item1, MyClass item2)
    {
        if(item1 == null && item2 == null)
            return true;
        else if((item1 != null && item2 == null) ||
                (item1 == null && item2 != null))
            return false;

        return item1.MyString1.Equals(item2.MyString1) &&
               item1.MyString2.Equals(item2.MyString2);
    }

    public int GetHashCode(MyClass item)
    {
        return new { item.MyString1, item.MyString2 }.GetHashCode();
    }
}

Estas son las características de mis colecciones Colecciones buenas y predeterminadas:

Valor predeterminado: es un conjunto grande, que contiene todos los pares deseados de {MyString1, MyString2}, pero los valores de MyString3 son, como puede suponer, valores predeterminados.

Bueno: es un conjunto más pequeño, que contiene principalmente elementos que están en el conjunto predeterminado, pero con algunos buenos valores de MyString3. También tiene algunos {MyString1, MyString2} que están fuera del conjunto deseado.

Lo que quiero hacer es esto: tome solo los elementos de Bueno que están en Predeterminado, pero agregue los otros elementos en Predeterminado a eso.

Aquí está, lo que creo que es, mi mejor intento:

HalfWantedResult = Good.Union(Default, new MyEqualityComparer());
WantedResult= HalfWantedResult.Intersect(Good, new MyEqualityComparer());

Enseñé que debería haber funcionado, pero el resultado que obtengo es básicamente solo el buen conjunto de pares {MyString1, MyString2}, pero todos provienen del conjunto Predeterminado, por lo que tengo el valor predeterminado. También intenté cambiar el valor predeterminado y bueno de la última intersección, pero obtengo el mismo resultado.

Respuestas a la pregunta(2)

Su respuesta a la pregunta