As documented in
this thread, the SelectionField "values" parameter expects a list of the form [(value, display, attrs)] where value is a "Python" value, in the FormEncode sense. The template, then, should render that value to the <option> list using the SelectionField validator's from_python method. Furthermore, when a SelectionField is checking to see if a particular option is selected, it should not do any validator conversion, since it is comparing two "Python" values.
I have attached a patch (with a test) which converts outgoing SelectionField values and sets the "selected" attribute on the options correctly.