After some more testing and code tracing I can say:
- The resulting dropdown will have a double selection, one for the
default value (set by SQLFORM __init__) and one for the corresponding
request.vars value (set during accepts) if it is different from the
default.
- It is a bug but not an easily squishable one.
- There is no need to use form.vars as I thought in my previous post,
request.vars has the info.
- The solution might still be to recreate the form components if there
are errors but further testing is required.