The command `Do[Print[i],{i,1,3}]` does what you expect: creates 3 output lines of `1`, `2` and `3`, in that order.

If one merges these output cells, then evaluates the original `Do` command, the output is now `3`, then `2`, then `1`. When one deletes the output cells, the regular behavior returns.

It isn't that the `Do` loop is running backwards. When one does "the same thing" with 

    temp={}
    Do[AppendTo[temp,i];
    Print[i],{i,1,3}];
    temp

the order of the `Print` command is reversed, but the contents of `temp` are still `{1,2,3}`, not `{3,2,1}`. 

Why does this happen? Does `Print` write to a queue that is sometimes dumped in reverse order?