My take is that the only way to catch someone is if their plays are the same as some known bot at some specific setting (i.e. they make the same moves as gnu 2-ply). Unless they do that (and it's trivial to simply substitute the third or fourth best move that loses little equity) it's going to be tough.
If you can find a specific person and observe him or her playing under controlled conditions and they play at a much lower error rate than online you'll have a good case, but i don't see how this is helpful as a screening mechanism.
I don't think speed of play will be of much use - it's trivial to slow the bot down if it plays too fast, and a skilled player using the gnu command line interface can play as fast as an ordinary human. Yes, you might catch the person who occasionally pauses to enter the position into gnu, but these aren't the fish you're after.
Bottom line is that it's too easy to cheat with a bot and too hard to catch them, which is why I'd never play for money online. (the real reason is that I'm not good enough, but that's another matter.)
As for bots on FIBS, the API allows bots to connect and play, and there are many of them. Etiquette says you're supposed to declare it to be a bot, but since there's no money on the line, who cares?