高尾と申します。
ちょっと日本語では表しにくいのですが、件名の通り、lambda中のProc中のreturnの挙動が不可解だったため、バグかと思い、投稿します。

a = lambda do
  b = Proc.new do
    return
  end
  b[]
end
a[]

上記のコードを実行すると、ruby1.8.7ではLocalJumpErrorが起こり、ruby1.9.1では正常終了します。
lambda中のreturnはcallのreturnになり、Proc.new中のreturnは生成元のreturnになる筈なので、
正常終了が正しい挙動のように思います。

また、

def a
  b  = lambda do
    Proc.new do
      return
    end
  end
  b[][]
end
a

を実行すると、ruby1.8.7、ruby1.9.1ともに正常終了します。
こちらは、Proc.new中のreturnが実行されるときには生成元が既に終了しているので、LocalJumpErrorが起こるのが正しい挙動のように思います。