What you are seeing is not a bug but rather the difference between your specific model servos and the 'generic' servo 'model' that the servo library assumes in it's default parameters. From the arduino reference:
servo: a variable of type Servo
pin: the number of the pin that the servo is attached to
min (optional): the pulse width, in microseconds, corresponding to the minimum (0-degree) angle on the servo (defaults to 544)
max (optional): the pulse width, in microseconds, corresponding to the maximum (180-degree) angle on the servo (defaults to 2400)
Therefore a specific servo will only move accurately 90 degrees if it's end of travel points are at 544 usec and 2400 usec. You would be find out what your servo end points are exactly and use the optional parameters when you call the attach method using servo.attach(pin, min, max) where min and max are the actual end point times required for your specific servos. Many servos will not have 180 degrees of travel, 120 degrees is common and some even less. Only through testing will you be able to determine these values as it's not normally a published specification for most servos. Servo manufactures only fully comply that a pulse of between 1 and 2 msec will not hit an end point in either direction. How much 'over travel' a specific servo has for either direction is specific to each manufacture model of servo.
One really is better off using the servo libraries WriteMicroseconds() command as it has better control and resolution over a specific servo rather then the 'abstracted' degrees movement of the arduino servo write(degrees) statement.