VD>Я что-то пропустил? Как обойти это безобразие?
Там же ещё есть record struct, которые вообще ValueType. Поэтому переопределение в рекордах немножко своё. Нужно сделать Equals от IEquatable, но без override, компилятор поймёт:
public sealed record R(int x, int[] xs)
{
public bool Equals(R? other)
=> other.x == x && other.xs.SequenceEqual(xs);
}