Hmm, on second thought, the above wouldn't work in the case of someone being on the last step of a problem.

children = [child for child in task_states if child['state'] in [CombinedOpenEnded.DONE, CombinedOpenEnded.ASSESSING]]

scores = [0]
for child in children:
  if child['child_history'] and len(child['child_history']) > 0:
    scores += [child['child_history'][i].get('score', 1) for i in xrange(len(child['child_history']))]
max_score = max(scores)

This covers the edge cases where the current_task_state is initial, but there is a best_task_state that is assessing (without any score having been saved).  It also covers the case where in a multistep problem, a student isn't completely finished with it.