Here is simplest piece of code
Dim testInvoiceDate As DateTime? = If(String.IsNullOrEmpty(Nothing),
Nothing,
The If-statement will return the same datatype for both cases.
Because the return-type in the False-case is DateTime, the return-type is the DateTime-default-value for the True-case.
Default for DateTime is DateTime.MinValue which is #1/1/0001 12:00:00 AM#.
This will work as expected:
Dim testInvoiceDate As DateTime? = If(String.IsNullOrEmpty(Nothing),
Nothing,
New DateTime?(New Date(2018, 3, 20)))