If you set up the matrix like that, then the coordinate (100, 100) is on the exact corner between the four pixels at (99,99), (99,100), (100, 99) and (100,100), and which of the four pixels is rendered is up to how integer rounding and floating point errors behave in that particular case. Any of the four pixels could be rendered. You need to offset the projection matrix by one half pixel to ensure that integer coordinates ends up on pixel centers and not pixel corners.
gluOrtho2D(0.0, 1200.0, 0.0, 800.0);
glTranslatef(0.5, 0.5, 0);
Note that this translation is necessary for points and lines, but shall not be used filled primitives such as triangles.