thank you all for your answers.
@ Sichlid + darkinferno: that doesn't solve the problem. using "old"-variables is something thats needed independent of client update ranges.
@Puppeteer: Thats a good idea, and it keeps the code simple. However, you'd have to keep the zones quite small, and you'd have to take care of smooth transitions between the zones, or entities will just pop up in front of the player when he gets near the zone border.
I'll be using zones with "hard transitions", meaning that the player will see a loading screen when switching between those zones (through doors or small gateways). They are supposed to be quite big, so I still need an update ranges system.
I've solved the problem this way:
Every entity that wants to send updates has an array that has as many slots as there can be players (about 100).
Every frame, the entity checks whether it is within the range of the players.
When the array entry for the player x is 0 (means "not in range before") it sends all its information (health, position, level etc) to x. The entry is then set to 1 (means "has been in range last frame"). When the array entry is 1 in the first place, only changed values are send.
This code has to run on the server only. I've yet to see if I'll get performance problem.