Don't forget that spritebatch.Draw has a depth parameter in some of its overloads and that can sort by depth. Make sure you use the SpriteSort mode that sorts by depth in the begin call.
So if your setting each drawing and know its z ground just set that for depth.
If its dependent on were you position it by height divide the position.Y by the windows Height and set that to depth.
If its a mix of both make a algorithm and set that for depth.
Or you can make a drawing list of your own class that takes all the types of parameters that spritebatch takes and sort it yourself by depth then pass it in order but spritebatch is pretty efficient at doing this. If this is really about getting it into the depth buffer i think you can just flip it on from the graphicsdevice. SpriteBatch is in reality just drawing 3d quads.