I don't know why, but I would have expected higher speeds. Maybe my mind just assumes "lasers = fast". It would be interesting to know which factors make this setup unreliable at higher speeds.

Most likely one of:

  1. Noise in the detection (the room is bright etc.)
  2. The laser being a form that's not susceptible to direct modulation (if it takes a millisecond to start/stop lasing, obviously you cannot turn it on/off very fast)
High-speed laser-based systems (gigabit and beyond) don't try to turn the laser on/off at all, they just have something in front that tries to cancel out the signal (e.g., through self-interference) when you want to send a zero.

Individual bits always go fast, the difficulty is always telling many apart. Speed is kind of the wrong word. It's about throughput

I would bet that the laser pointers used here are the bottleneck.