After seeing suggestions in a related post, I looked closer and found I was leaving out several things.
After using code like what is below for each segment of the train, I believe I have the state saved/restored as completely as possible for the current Bullet version with the post-restore variations being due to this issue
http://code.google.com/p/bullet/issues/detail?id=519.
Code:
m_rigidBody->clearForces();
m_rigidBody->getMotionState()->setWorldTransform(*state->m_segTransform);
m_rigidBody->setCenterOfMassTransform(*state->m_segTransform);
m_rigidBody->setLinearVelocity(*state->m_segLinearVel);
m_rigidBody->setAngularVelocity(*state->m_segAngularVel);
m_dynamicsWorld->getBroadphase()->getOverlappingPairCache()->
cleanProxyFromPairs(m_rigidBody->getBroadphaseHandle(),
m_dynamicsWorld->getDispatcher());
if (m_vehicle)
{
m_vehicle->resetSuspension();
for (int i=0;i<m_vehicle->getNumWheels();i++)
{
//synchronize wheels with (interpolated) chassis worldtransform
m_vehicle->updateWheelTransform(i,true);
}
}