文法

module Mod
  def test
    return "Mod"
  end
end
class Cls
  def test
    return "Cls"
  end
  include(Cls)
end
p Cls.new()test()

上のスクリプトを実行すると何が表示されるか。答えは"Cls"。
実はモジュールをincludeすると既存のメソッド定義を上書きするのだと勘違いしていた。
実際はClsの親としてModが追加されるので、Cls内部でメソッドを検索して見付からなかった際にModのメソッドが検索されるという順になる。
だからMod#test()はCls#test()に覆い隠されて利用することは出来ない。
モジュールをincludeしたときにメソッドを上書きするためには次のようにすれば良い。

module Mod
  def test
    return "Mod"
  end
  def self.included(klass)
    klass.__send__(:alias_method, :test_old, :test)
    klass.__send__(:remove_method, :test)
  end
end
class Cls
  def test
    return "Cls"
  end
  include(Cls)
end
p Cls.new()test()

要するにモジュールをincludeした際に古いメソッド定義を消すわけだ。
ちなみにundefでは上手くいかないのでドキュメントを参照。