Глядя на шестнадцатеричные значения, если Int32.MaxValue и Int64.MaxValue должны предоставить ответ.
Ключ является наиболее значимым битом. Для положительного целого числа старший значащий бит устанавливается только для отрицательного числа. Таким образом, максимальное значение Int32 равно 0, за которым следует целый ряд 1 с. Порядок не важен, просто будет хотя бы один бит 0. То же самое относится и к Int64.MaxValue.
Теперь рассмотрим, как должен работать профсоюз. Это будет по существу раскладывать биты значений рядом друг с другом. Итак, теперь у вас есть набор битов длиной 64, который содержит два 0-битных значения. По одному на каждый из экземпляров Int32.MaxValue. Это никогда не может быть равно Int64.MaxValue, поскольку оно может содержать только один бит 0.
Как ни странно, вы, вероятно, получите искомое поведение, если для fieldSecond будет установлено значение Int32.MinValue.
РЕДАКТИРОВАТЬ Пропущено, что вам нужно сделать это FieldOffset (4).