So it's like this:
1) Player A and player B are close to one another. fm_playerprethink() is called for player A, so player B becomes insolid.
2) Player B and player C are outside the range. fm_playerprethink() is called for player C, so player B becomes solid.
Try and find a workaround for this, or use server_frame(), tho I wouldn't do that if I were you