Crossing servers while mounted is the chief cause of this. I strongly recommend dismounting and leading the horse across server boundaries. The key problem here is that each server can "remember" the mounted state differently. Since a person mounted on a horse is, mechanically, just a different character model, this information gets saved when a character logs out of one server. However, a running server also remembers this and across multiple logins of the same character (assuming the server has not been reset) will often cache this information (along with other things like active spells, position and such) rather than loading them explicitly from the character file.
Unfortunately, this causes extreme headaches with the horse system, and trust me, I spent far too much time trying to get that to be more resilient and ended up getting about half way there. I unfortunately came to the conclusion that the best "fix" is to just train people to dismount before crossing servers.
As for where the horse appears when you log in, you have to tie the horse down (one of its conversation options) for it to appear in that place each time you log in. Otherwise it will default to appearing by your side each time.