Just wanted to give an explanation.
Alright, so the problem is that A_CheckFloor checks the calling actor's floorz value to see if it goes below the current sector's floor or below the lower 3D floor. (As far as I can tell "floorz" never takes into account actors below other actors.)
I don't feel comfortable trying to hack around this by messing with a passenger's floorz value just to trick A_CheckFloor to do the state jump. (I've tried; I can't get it to work without messing up other things.) And at this moment in time there is no way to even detect if the passenger is going to call A_CheckFloor so I can't reliably intercept it.
And besides, checking the passenger's floorz is already done as part of the passenger management logic.
It checks if the passenger's floorz is above the platform's top. (The "top" is its Z position + its height.)
And if it is, it's assumed there must be a 3D floor above the platform - meaning the passenger should be ignored/not moved by the platform.
This kind of check is done repeatedly for each new/current passenger per tic so that I don't have to rely on functions like
NextLowestFloorAt. Because it would make it more expensive.
One day I'd probably need to restructure some or all of the code, but not right now.