All I could come up with is that "return" in a block returns from the lexically enclosing function, while "return" in a proc returns from the proc itself. (This is a useful distinction, though it leads to the confusing LocalJumpError exception when you call a block after control has passed away from its lexically enclosing function...)
Is that it?