Interesante. Se me ocurren otras cosas:
- Escribí el código con el que asignas el valor inicial de los dropdownlist si lo usas.
- Tene presente que el SelectedIndex es diferente al SelectedValue dependiendo de la forma en que asignés el valor.
- Verifica si el valor que asignás con la base de datos (puede ser que el error este en el guardado)
- Si los valores almacenados en la base y los valores que mostrás varían por 1, entónces, es la resta que le haces al SelectedIndex, por ejemplo, ahí estás diciendo que el valor que esta en la base, le restes uno.
Probablemente ya hayas descartado estas posibilidades, pero es mejor asegurarnos.