Oh, I believe I know where the issue is. Without looking the code again, the issue is that you're storing the selected value back to the property where the array itself should be. So two options:
1. if all of your todos will have the same departments available for that dropdown, then just store them on the scope, not on the individual todo - and then store just the actual value on a todo. Like, $scope.departments = ['One', 'Or the other']; $scope.todos = [ { name: 'Do it', department: null, done: false }, name: 'Do not', department: 'whatever was selected', done: true }];. And on your markup just pickup options from the scope instead from the individual todo.
2. If you have the departments per todo, store the selected one in a separate property. Or better, with your naming, store the selected one in todo.department, and store the "available departments" under todo.availableDepartments, then take your options from that instead.
Let me know if you don't understand what I've just written :) Also, try one of the two things. Better yet, try both so that in the future you'll know right away ;)