This tutorial is from my own experience with doing something similar in Maya, so it might not be helpful for blender but whatever.
Firstly you want to set the render to the exact tile size you want (or clean multiples), then set the camera to ortho, then the camera has a "size" property which seems arbitrary but it seems to be related to the grid units. I would suggest using size 10 with a 10 tile grid because it will make pixels columns perfect as there hopefully won't be floating point rounding (sub-pixel rounding). If the grid size for the x or y value was not a whole number then the grid spacing will be inconsistent which is the problem I was having.
I came up with the following formulas (for a camera only rotated through the x axis (pitch)):
grid_x = render width/camera ortho size
grid_y = sin(camera angle)*grid_x
So if you have the render set to 100x100 pixels and the camera size is set to 10 then:
grid_x = 100px/10 = 10px
grid_y = sin(camera angle)*10px
Now grid_y is a little trickier. You can keep changing the camera angle to get the desired grid spacing through trial and error or you can use the power of mathematics (inverse sin)!
sin
-1(desired grid_y/grid_x) = camera angle
So say you want the height to be twice the width, you do sin
-1(0.5) which would be a 5 pixel desired_grid_y if following the formula (5px/10px = 0.5). This gives a 30 degree camera angle.
So with that you have the ortho camera size set to 10, camera x position set to 0, camera rotation set to the desired angle, render settings to the actual size you want. I think camera y position can be whatever you want, I just set it to 15 I think because it "looked right". Lastly all you need is to get the camera z position... I forgot that part, but it looks important and is underlined in the image
Also (pretty obviously) if you raise an object UP by 1 unit in the y axis (up in 3d position) it won't move up by one y_grid spacing when rendered (2d render position). Instead it will move up by {camera y position/sin(camera angle)} pixels... I think (might be wrong)... So if you did want to line it up to the ortho grid you'd have to follow this equation {y_grid/(camera y position/sin(camera angle))} to get how many units you should move its 3d position along the y axis to go up one y_grid spacing in the render. However maya was having some issues with floating point rounding I think and so to get around this when raising up I added a certain amount and when pushing down I negated a certain amount from this value (this is why it's +1.14 and -1.13 in the image).