Well, I think there are two types of errors.
Business errors should be handled at process level, using Error Events in should BPMN process.
Technical exception are different. If you are using persistence, and and exception is thrown by one node, it will roll it back until the last safe state, so the process will not be corrupted. You can catch the exception in the code calling the process (start proess, complete task), and make your own logging and you could also retry. In this case, it can be helpful to use a JMS layer to give orders to the process. As JMS can do the retry, the persistence, etc.
My 2 cents!