The reason of this bug is:
for multiple choice pools the form uses MultipleChoiceField and CheckboxSelectMultiple widget, but for single choice pools it uses ChoiceField and RadioSelect. RadioSelect+ChoiceField returns only the choice itself, not a list (string id in this case).
When we ask len("13"), for example, it returns 2, so validation fails.
The best solution I've found so far is a variation of sedah's solution, but with a reasonable check (not the "instance of" magic):
Sedah, I agree there is nothing magical in instance check itself. However if you read the code and see "if not isinstance(ids, list)" this looks really magical (why do we need to check for instance of list, not for something else. And why ids could be something but list).
Anyway, thanks for your solution, it was my starting point for the issue. I just upgraded your solution with a "business-logic" related check.