I frequently use SELECT CAST(FLOOR(CAST(<yourDateHere> AS FLOAT)) AS DATETIME)
Interestingly, rounding happens near midnight. The following returns '2010-04-08 00:00:00.000':
DECLARE @Date DATETIME = '2010-04-07 23:59:59.999'
SELECT CAST(FLOOR(CAST(@Date AS FLOAT)) AS DATETIME)
Not sure if this timestamp would actually happen...