Watch listeners are evaluated at every digest cycle. Usually that happens automagically, but while unit testing you need to manually trigger it:
it('should update the start date', function() {
// Arrange
ProfileSharedObjectMock.startDate = new Date(2013, 0, 1);
// Act
$scope.$digest();
// Assert
expect($scope.startDate).toEqual(new Date(2013, 0, 1));
});
I've created a Plunker script so you can see the whole test suite working.