What you can see is the effect of sub-pixel movement. If an area that produces a pixel, has different contents than another area producing a pixel, those pixels can differ. Therefore what you need is to snap your objects to pixels.
I've set up my camera at 60° angle, and scaled down the unit scale to get a satisfying grid - something that could be my resolution. I decided that I want a lower resolution than yours, so that I can count the pixels easier and the screenshots are more readable here on SE site. I made sure that the grid aligns with camera borders.


Keep in mind, this is only a pixel grid in the Top Orthographic View, while in the camera view, every grid cell has only half (perceived) height, so each pixel is two grid cells tall.
Now when I duplicate the sphere in camera mode, and move them with CTRL held, my sphere is aligned to the pixel grid:

And if I render the image, all spheres look the same:

However, if you look in a Free view, you might notice the positions of spheres don't exactly illustrate how you would position them in a real scenario:

So let's repeat, this time disabling Z axis (SHIFT + Z) when moving our balls:

The render:

Some balls are different. To be exact, there are two types of balls. This is because, as I said earlier, the grid on XY plane isn't the same as pixel grid - 1 pixel takes two cells. So we need to make sure to align all our objects to even vertical cells (or all objects to odd vertical cells, but we have to be consistent):

And the render:
