Make your tiles wider and longer, make the sprites less wider and longer then the tile / squares = more leverage.
You can tilt them more that way if you really want.
(besides it looks like a tile can barely fit a sprite as it is ackk)
Keep your camera low don’t allow it to go to high or rather don’t allow the angle of the camera to go high.
A high camera will cause other perspective problems anyways.
You can manually align the sprite or use some wacky combo of billboard and others. But…
I think Matrix.CreateWorld(pos, target, up) is your best friend here.
Annoyingly i always forget which takes a position and which takes a direction CreateWorld or LookAt for the forward target parameter, either way You want to Use CreateWorld here…
The target is the camera position (or the direction from the player to the camera)
The position is the sprite
The up is the upward direction of your map.
if createworld takes a direction not a position then give it camera.position - sprite.position, instead of just the cameras position.
If you insist on leaning then create world is still nice here.
Being able to assign the upward vector with it. You can test that sprites up vector with a dot product against the up vector of the map. This will give you a resulting cosine. Multiplying that cosine by itself will give you an Acosine result. Takeing that and multiplying it by 90 degrees or PI/2 will give you the Angle you are leaning at in Degrees or in Radians in difference from the sprite pointing straight up…
You will reason the taller the sprite the more it will move outward of your tile at its top for sprites with the same angle and differing hieghts and risk clipping. I.E. you can define limits for how far back each sprite can lean.