Thanks, I'll give that a try. I'm running a quad core i7 so my framerate without vsync was hard capped at 100fps (at least that's what it said when I set cl_showfps 1), but for some reason turning vsync on fixed the issue. The problem is that vsync doesn't seem to work properly in HL as my framerate then goes all over the place, but that's a different issue. I'd rather the bots worked properly regardless of vsync, so I'll try your suggestion!
I changed the structure of HPB bot, RunPlayerMove only gets called once now at the end, and various functions modify the bot's X and Y speeds and buttons before it gets called. Code looks much neater now, my BotThink function is only a few lines long