void (Base::*pBaseFoo)() = Base::Foo;
(pBar->*pBaseFoo)();

void (Bar::*pBarFoo)() = Bar::Foo;
(pBar->*pBarFoo)();

デバッガで追ってみましたがどちらも最終的にBar::Fooに。

Baseにキャストしても元がBarなんで、結局Bar::Foo

やっぱり無理なんですかねぇ...