原です。

klass.protected_instance_methods(true) は、klass の上位で一
度でも protected だったメソッドは、リストに挙がって来ますよ

ね。

  class Foo
    def chop; end
    protected :chop
  end
  
  class Bar < Foo
    def chop; end
    public :chop
  end
  
  class Baz < Bar
  end
  
  p Baz.protected_instance_methods(true) #=> ["chop"]


これは不便ではないですか?例えば klass で利用できる protected 
なメソッドのリストを得ようとすると、

  Baz.protected_instance_methods(true).find_all{|m|
    Baz.protected_method_defined? m
  } 

と書かなければならない。

現在の利用可能な protected のリストを返すように、
protected_instance_methods(true) の仕様を変えたらどうでしょう?

public_, priavte_ についても同様です。