its pointless clearing the button fields. the engine will reassert them when the next packet is arrived.
if you get packetloss at a bad time, PlayerPreThink will again be run without the button fields getting reasserted yet. you code will then think its been pressed again after the next packet, which is probably not what you want.
other than that, no idea.