Ответ 1
Это потребует спекуляции, это решение было принято давно, задолго до отправки .NET 1.0. Атрибут System.DateTime - это, в лучшем случае, микро-оптимизация, не редкость в .NET-коде. Это несколько уместно, структура имеет только одно поле, поэтому никогда не возникает проблем с макетом. Те, что для внутренних структур CustomAttribute были, вероятно, сделаны одним и тем же программистом. Не имеет значения, неуправляемый код никогда их не видит.
Одно для System.DateTimeOffset было сделано намного позже и почти наверняка ошибка копирования-пасты.
Этот программист ушел с ним, и нет никаких оснований для того, чтобы CLR перестроила макет из последовательной версии. Повторная компоновка с автоматической компоновкой происходит, когда структура содержит прокладку между полями, которые достаточно велики, чтобы соответствовать другому небольшому полю. Не для DateTimeOffet.
Некоторые шансы вы получите гуру Microsoft, чтобы обратить на это внимание, когда вы отправляете отчет о обратной связи для DateTimeOffset. Это неправильно афайк. Отправьте его на сайт connect.microsoft.com