I solved this by only getting the condition rating date if there was at least one and making sure I set the value to 1/1/1753.
.ConditionRatingDate = If(a.ConditionRatingList.Count > 0, a.ConditionRatingList.OrderByDescending(Function(o) o.DateCompleted).Select(Function(o) o.DateCompleted).FirstOrDefault, New Date(1753, 1, 1))
When I allowed the False value of the IF() to be NOTHING or Date.MinVlue I continued to have the issue, looking at the generated SQL it was translating those into;
CASE WHEN ([Project8].[C3] > 0) THEN CASE WHEN ([Project8].[C1] IS NULL) THEN convert(datetime, '0001-01-01 00:00:00.000', 121) ELSE [Project8].[C2] END ELSE convert(datetime, '0001-01-01 00:00:00.000', 121) END AS [C15]
OR
CASE WHEN ([Project8].[C3] > 0) THEN CASE WHEN ([Project8].[C1] IS NULL) THEN convert(datetime, '0001-01-01 00:00:00.000', 121) ELSE [Project8].[C2] END ELSE '#12:00' END AS [C15]
The query now runs correctly, I will just need to educate my users as to what 1/1/1753 means.