Well, one possibility is the microcontroller is not fast enough, or the program is not efficient enough, to keep up with the motor at higher speeds. I'm just taking a guess. But, you do need to respond pretty quickly to changes in the commutation signals. I use a CPLD to decode the Hall signals, and the logic produces the dead time for the half-bridges, and responds in 400 ns after that.
Jon