Refactor changeStatus() a little to DRY

Extracts some of the duplicated code to an alternative location.

There's two more refactorings to do here (return earlier, split conditional into dispatching to 'actions'), but it's confusing to push that all at once.