Здесь вы можете проверить типы enum, nullable, primitve и value;
Console.WriteLine(propInfoOne.PropertyType.IsPrimitive); //true
Console.WriteLine(propInfoOne.PropertyType.IsValueType); //false, value types are structs
Console.WriteLine(propInfoThree.PropertyType.IsEnum); //true
var nullableType = typeof (Nullable<>).MakeGenericType(propInfoThree.PropertyType);
Console.WriteLine(nullableType.IsAssignableFrom(propInfoThree.PropertyType)); //true
Обратите внимание, что типы значений и примитивы - это разные вещи. Примитивы - это просто сокращения, которые отображаются на типы (например, bool> System.Boolean). Типы значений передаются по значению; это struct (ure) не классы.