Причина в том, что метод ToString немного усекает фактическое время, поэтому результат не тот, когда вы возвращаетесь в другом направлении.
Замените вашу первую строку, например, на
DateTime dt = new DateTime(2009,10,29,16,35,56);
и вы увидите, что происходит.