It's something to do with the way stdio.h works (it does some quite complicated buffering and stuff behind the scenes, which would be sensitive to newlines, which might cause a buffer to be flushed or something).
If you replace the call to printf with one to write, like so:
write(1, "Hello\n", 6);
/* OR */
write(1, "Hello", 5);
Both versions output Hello twice.