Andrew Bayer I've observed the following:
When running parallel steps with fastFail set, the fast-failed aborted build will return FAILURE if the act of aborting a step that was still in progress returns an error code.
However if other parallel steps have finished successfully, and the last running step fails, this correctly returns ABORTED in the event of failure.
Some kind of race condition where if a step fails, fastFail aborts all other steps, and the last error code returned is the status seen by the declarative pipeline, but isn't the one respected by the overall build.status? Hopefully that makes sense.