but I was wondering about the (conceptual) advantages of separating result from status (even though it seems to me that one might argue that error and cancelled are also simply different states than the completed state).
There is a great advantage in detailing progress and identifying failiure points (within reasonable limits) as in your case.
I think the confusion stems from the terms 'status' and 'state' - We must qualify those terms. So for example, "Task Status", even that is not very precise, so we may want to use "Task Execution Status", however this is wrong because you already have an execute step. We may use the name "Task Processing Status" and the values of: "initiated - validating - executing - completed" make perfect sense. Indeed we could add 'Cancelled' to the list. However, 'Error' does not answer a question like: What is the Task Processing Status very well. It looks like 'Error' is a sub-status of Completed. So what do we do? We could rename Completed to be Completed OK and then we could add Completed With Error to the list. So the final list of the Task Processing Status values are:
Initiated,
Validated,
Executing,
Cancelled,
Completed OK,
Completed With Error
Edit: now the above list still requires some work. The first 4 items don't have the word 'OK' in them. So if it better be there to match the "Completed OK" state. The other thing is that the first 4 items don't have a "with error" - What doe that mean? What happens when "Executing" abnormally ends - Does that call for a new state of "Executed with Error"? At this point, more input and analysis may be required.