Все верно. Пока тело движется, движок вычисляет его положение, а после остановки тела засыпают пока с кто-нибудь с ними снова не столкнется. Поэтому у вас тела реагируют на гравитацию пока падают и перестают "видеть" изменение вектора гравитации после остановки. После изменения вектора гравитации нужно делать каждому телу rigidbody.WakeUp(), чтобы движок подумал что с телом что-то столкнулось.
А вот насчет проваливаний - у меня ничего сквозь пол частично не проваливается.