To my understanding from tf.nn.conv2d doc for SAME convolution (no matter the stride) The first dot product should be centered around (0,0) though as you can see bellow when the
What is happening is that tensorflow will add the columns at the end if the number of extra zero columns (from padding) are odd.
In your example with stride = 1 it needs to add two columns, so it adds a column at the beginning and one at the end (meaning beginning, end of each side: left, right, top, bottom). Stride = 2 will do the same.
However, for stride = 3 it just needs to add one column and it does it at the end (right and bottom). If it needed to add 5 columns it will add 2 at the beginning (left, top) and 3 at the end (right, bottom)