These return different results for the end of months preceding a month that has more days in it. For instance January has 31 days, and February only 28 or 29 days.
Here is an example:
DECLARE @d datetime;
SET @d = '01/29/2009';
-- Last day of month
SELECT
dateadd(day,-(datepart(day,@d)),dateadd(mm,1,@d)),
-- Returns 2009-01-30 00:00:00.000, incorrect
dateadd(day,-(datepart(day,dateadd(mm,1,@d))),dateadd(mm,1,@d));
-- Returns 2009-01-31 00:00:00.000, correct