If you are projecting on a wall and the dot is above or below the source you will always get some vertical movement unless you specifically compensate for it. For compensation you'll need to understand a few things:

When you draw an imaginary line from the light source perpendicular to the wall, you get the point closest to the laser source. Let's call it normal point. If you try to project a horizontal line above that point you will actually get a U shaped line. If you project the same line below your normal point you will get an arching line (upside down U).

If you project a vertical line left of normal point, you will again get a curve curving "away" from the normal point. Opposite happens on the right side.

The closer you position your light source to the wall, more pronounce this effect is.

To compensate, easiest thing would be to measure how much it deviates from ideal and come up with a mathematical function which you would include while projecting.

So, to draw a dot on (x, y), you need to actually draw it on (x-x*k, y-y*l), or something similar, where k and l are coefficients for distortion. I don't think the distortion is linear, so this particular formula most likely won't work exactly (I don't have time to figure out the exact formula, sorry), but this should give you an idea of what to look at. If you do use the above formula, k and l should be 0 < k < 1, and most likely k = l.

Forgot to mention that your normal point is (0, 0)