I'm kind of old-school
RETURN is for ending a procedure/function/method/trigger.
In most cases there should only be a single RETURN, at the end where it is, essentially, redundant noise. I am in the habit of putting it there even when it isn't strictly needed. It says "I'm done. The code for this procedure/function/method/trigger ends here."
I have never been a fan of RETURN ERROR or returning any values from procedures. For procedures returning values is the purpose of OUTPUT parameters.
For triggers RETURN NO-APPLY is a very common and appropriate thing to do.
For functions you need to use RETURN to return a value.
Multiple RETURN statements in a procedure/function/method/trigger should be avoided. The RETURN should almost always be at the very end of the procedure/function/method/trigger. Yes, I know I already said this - it's one of those things that should be repeated
It is a "bad code smell" for there to be multiple RETURN statements or for them to appear in strange upstream positions.
One upstream RETURN exception that I am comfortable with is if a procedure's "sanity check" fails.
Using LEAVE instead of RETURN, even where it would "work" is just creating confusion and being clever for the sake of being clever. Don't do it. You will confuse the next person to come along. Nobody will be impressed and somebody might end up doing something regrettable as a result.
You should label your blocks and use those labels whenever you LEAVE or NEXT a block (or UNDO or RETRY but IMHO you mostly shouldn't be doing those things). I confess that my own code could use quite a lot more block labelling.