I've decided this must be a hardware issue with my keyboard
Depends how you want to use them in a loop, and what you want to trap but I'd say use _KEYDOWN for detecting key combinations shift + something, or alternate or ctrl and use _KEYHIT for arrows or letters, more specific things.
Take a look at Task 9 in my tutorial: http://qb64sourcecode.com/Task9.html
I go over each method of keyboard input along with example programs to accompany them.
_KEYHIT has many of the same limitations as the INKEY$ command mainly being the buffered input and slow repeat rate. Not really great for games that need instant keyboard response. In order to implement _KEYHIT for fast action games you'll need to create a latching variable and then detect when the key has been released which _KEYHIT can do as well.