Ok, I understood the magic words:
g.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.Half;
In combination with setting the interpolation mode to NearestNeighbor, you can make a complete block.
Without setting the interpolation mode you will get a weird mix (expected). Without setting PixelOffsetMode, the nearest neighbor algorithm does not have a neighbor to compare with empty paint, and therefore only half of the image draws half the width. Setting the offset to half, everything moves by -0.5px and allows this algorithm to work with block textures.
source share