Ok, it's not a bug but just a timing issue.
You're calling wait(-0.5) immediately after loading a model. The hard disk access goes into the wait time, thus depending on the speed of your hard disk the -0.5 are most likely too short. It probably worked on George's PC, but not on yours.
You could use a longer wait time like (-5), but of course this might still not work on other PCs and is anyway a bad solution. The normal way is polling the entity until the handle becomes valid. You can do it this way:
my = ent_create ("redsoldier.mdl", vector (100, 50, 40), move_players);
while (my.client_id != dplay_id) wait (1); // wait until the handle is ready
client_ent = handle(my);
I'll mention this in the manual.