a process graph can have multiple "end nodes": leaf nodes that are not input to another node
a process graph must have one "result node": node with "result": True.
The result node is actually just important in the the context of a "callback" (in a "parent" process like apply, reduce_dimension, ...) to determine the value that has to be used by the parent process
The "result" property has little meaning for "top-level" graphs
the result node does not have to be an "end node". Result nodes can be input to subsequent nodes
a "save_result" node neither has to be "end node" or "result node" to be executed
The process graph building logic in Python client quite heavily works from assumption about the equivalence
which works for most use cases, but that's not fully in line with full openEO API.
also see https://github.com/Open-EO/openeo-geopyspark-driver/issues/424#issuecomment-2199780221: