Its always a good idea to put a capasitor on the suply for your elecronics when working with servos. They like to drain "high" currents when they get stuck and it can cause your microcontroller to "brown out", meaning it basicly resets the program. This can have very weird efects, similar to what you describe (depending on the program ofcourse)
Another tihng to look at is the timers. Remeber that the while inside an interupt service routine the timer interupts wont trigger (until the isr your alrdy inside has finished). Ive seen weird things happen in my bots due to this, typicaly changing positions slightly almost at random. (of course there is no such thing as random, but it looks like it, think this is how they invented hip-hop)
About servo controlsignals:
The actualy frequncy is not that important. most servos can handle a pwm frequncy of between 50 and 60 Hz, so i usualy make mine 55. It is the length of each pulse that is critical. The center position is "always" 1500 us, with the + or - depending on the servos. Tho most servos has the max turn of 60 degrees at 500 us, there are others, like the hitech HS-485 wich has a turn angle of more then 180. Here you might want the puls with to be in the range 500 - 2500 us. A typical source of weird servo behavior for me seems to be bugs in the code, either screwing up the pulse length when calulating it, or some code that is preventing the signals from changing at the corect time. A simple way to test that is to write a small test program using a delay_us function to generate an acurat PWM signal, disabling all other software. That way you can at least test if it realy is your PWM signal that causes the isues.