Yep, Peter is right. The "Return Alternate on NULL" option only returned an alternate value if there was a DBNull.Value in the database. However, if you set the property back to your alternate value, that alternate value was placed in the DataTable (not a DBNull.Value value).
With the "Return Alternate on Null / Set Null on Alternate" options, it works the same as the above with a Get (the alternate is returned in the case of the DBNull.Value in the DataTable); however, the Set now tests the incoming value and if it equals the alternate value, DBNull.Value is copied into the DataTable.
The difference between the (reference type) and (value type) options really only affects VB. When you specify the value type option, the = operator is used to compare the alternate value to the incoming value for the Set; with the reference type option, the "Is" operator is used to compare the alternate value to the incoming value. With C#, both values do the same thing... since the "is" keyword is not a comparison operator like it is in VB; in C#, the "==" operator is used for both. So, generally, you're going to want to use the (value type) option. Only in a few cases in VB are you actually going to want to use the "Is" operator to compare your alternate to the value.