Um
DateTime em C# é um tipo de valor, não um tipo de referência e, portanto, não pode ser nulo. No entanto, pode ser a constante DateTime.MinValue que está fora do intervalo de Sql Servers DATETIME tipo de dados. Tipos de valor são garantidos para sempre ter um valor (padrão) (de zero) sem sempre precisar ser definido explicitamente (neste caso, DateTime.MinValue).
A conclusão é que você provavelmente tem um valor DateTime não definido que está tentando passar para o banco de dados.
DateTime.MinValue = 1/1/0001 12:00:00 AM
DateTime.MaxValue = 23:59:59.9999999, December 31, 9999,
exactly one 100-nanosecond tick
before 00:00:00, January 1, 10000
MSDN:DateTime.MinValue
Sobre o Sql Server
MSDN:Sql Server DateTime e SmallDateTime
Por fim, se você estiver passando um C#
DateTime como uma string para sql, você precisa formatá-la da seguinte forma para manter a máxima precisão e evitar que o sql server gere um erro semelhante. string sqlTimeAsString = myDateTime.ToString("yyyy-MM-ddTHH:mm:ss.fff");
Atualização (8 anos depois)
Considere usar o sql
DateTime2 tipo de dados que se alinha melhor com o .net DateTime com intervalo de datas 0001-01-01 through 9999-12-31 e intervalo de tempo 00:00:00 through 23:59:59.9999999 string dateTime2String = myDateTime.ToString("yyyy-MM-ddTHH:mm:ss.fffffff");
MSDN datetime2 (Transact-SQL)