Simple project. Two servos are burnt. What's wrong?
While over-voltage is certainly most probable suspect, have you considered checking your code for PWM stability?

If something interrupts pulse train or switches it between two different duty values fast enough the servo might still "work", but will constantly alternate voltage on motor, which would burn it in no time.

One of the tricks I am using when working with linear actuators is to implement hysteresis + low pass filters for all analog inputs in software. Just out of curiosity I'd add debug printout of analog inputs - in these MCUs the ADCs are super-sensitive to noise (and you will be getting a lot of it from servos) without special precautions.

Another one is to make sure you re-configure PWM registers only when necessary (e.g. take into account servo resolution - it is pointless to change duty if servo cannot tell the difference) because in some PWM modes changing frequency produces "glitches" in the output.

UPDATE:

From the comments below: "The more operations I add the more unstable the movements become. The motor starts to move back and forward".

This to me is very strong indication that this could be software problem, not hardware. If adding couple operations is enough for motor to start moving it follows that without those operations it still is getting reverse command, only not long enough to visibly move.

Basically, you might be commanding it to move back-and-forth as fast as you can, and only when ADC actually changes either "back" or "forth" becomes slightly bigger, enough for servo to change position.

Is there any "humming" coming from servos even when they are seemingly stationary? Especially without physical load.