Minecraft Players always spawn in a radius of ~17 blocks around the spawn block. That area is called the spawn area. Every time a player spawns, he will spawn in a random spot in the spawn area. The only way to fix this is by making a spawn area with tripwire, and have the players spawn point set with a /spawnpoint command. As soon as a spawnpoint for a player is set, he will ALWAYS spawn at that exact point.
Take a look at this video by SethBling, it should help you out.
Are you using a server mod such as bukkit and its plugins?
If you are which sounds like you may then spawn is handled by those, even player inventories and players current locations can be handled by the server plugins like essentials instead of the player.dat which I presume you are using or something like it if you are deleting the player dat and its still the same.
Essentials spawn and player files are located in a sub folder underneath each other.
Also I don't know if you are using a server or a local world file but if its a server it will be handy to tell us what plugins you have installed and how they're configured in your permissions file as essential, multiverse and even vanilla all can handle spawn points and all are setup in there own ways and player inventories can be handled differently by a few plugins also.