自己レスです。

改めてプログラムを眺めていて気付いたのですが、派生クラスの演算子を

virtual bool operator==(const Delived& obj) const
ではなく
virtual bool operator==(const Base& obj) const
とすればうまくいきそうです。(試してみたところ、うまく動いています。)

派生クラスの演算子なのに基本クラスの参照で引数を受け取るのは何だか変な気持ちですが。。。

もし考え違いをしているようでしたらご指摘くださればありがたいです。