Вы когда-нибудь пытались использовать метод Convert.ChangeType() для преобразования значения в тип Nullable<T>? Неловко, он будет бросать InvalidCastException, говоря: "Объект Null не может быть преобразован в тип значения".
Попробуйте запустить это в ближайшем окне: ?System.Convert.ChangeType(null, typeof(int?))
По какой-то непонятной причине Nullables рассматриваются как типы значений. Например, typeof(int?).IsValueType возвращает true.
Для меня, поскольку Nullable<T> accept null, это тип класса, а не тип значения. Кто-нибудь знает, почему это было бы реализовано по-другому?