Thanks for the response. Under closer inspection, the serialize calls are never made for either the derived classes or the base class when using a base class pointer. This is the xml output after save_derived is called:

<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE boost_serialization>
<boost_serialization signature="serialization::archive" version="5">
<rd1 class_id="0" tracking_level="1" version="0" object_id="_0">
    <polymorphic_base class_id="1" tracking_level="0" version="0"></polymorphic_base>
</rd1>
<rd2 class_id="2" tracking_level="1" version="0" object_id="_1">
    <polymorphic_base></polymorphic_base>
</rd2>
<rb1 class_id_reference="0" object_id_reference="_0"></rb1>
<rb2 class_id_reference="2" object_id_reference="_1"></rb2>
</boost_serialization>

I am not sure where rb1 and rb2 tags come from since the serialize functions never get called. load_derived also does not call the serialize functions when using the base class pointers. I have attached the code I am using. It's identical to test_no_rtti.cpp except for two items. I do not have test_tools.hpp so I commented corresponding functions out and switched to std::ofstream/std::ifstream and xml_oarchive/xml_iarchive. Also, my target is a win32 console application. Please let me know if you have any ideas.
Thanks,
Daniel Roberts