I found the *&^%$# problem finally!
ddColors.SelectedIndex = -1
Apparently I wasn't paying enough attention while trying to resolve the "multiple values selected" problem and stuck this line at the beginning of the GET property code for the selected value, rather than the SET code. So every time it went to get the selected value, which it did on postback, it was resetting the selection. D'oh!
Thanks everybody!