What would happen if the recipient has code to handle the action
notification and there is an error processing it? For instance an
assertion failure? Would the whole transaction fail ?
Yes, because it's an inline action, the entire transaction will fail. You could design a custom deferred transaction that notifies an account though, and that would run in a different transaction.
Also, am I right to assume that the notification runs after the
original action completed, regardless on where the require_recipient
call appears ?
Yes, actions are processed sequentially at the moment. You can test this by printing something before and after a call to an inline action that triggers another print and checking the printed output order.