That was leading to no collisions with the "upper floor" walls because I wasn't checking the correct Z-plane for collisions. I was able to "fix" that problem by adding 1.5 meters to the Z in my collision code, but I'd much rather fix the stairs than leave it that way.
In case you're still vague on what I'm talking about, here's what my Z coordinate collision check looks like now:
1 | if ((Rel.Z + (0.5 * World->TileDepthInMeters) >= MinCorner.Z) |
1 | && (Rel.Z + (0.5 * World->TileDepthInMeters) < MaxCorner.Z)) |
That's where my avatar goes when I climb the stairs; Rel.Z plus half of the tile depth in meters. It's absolutely driving me batty. When I step through, I can see the little guy suddenly jump up by the offset, then move the rest of the way in the expected increments, but I can't pinpoint what's causing him to do that.
I'll paste in all the code I think might be relevant beneath this, but let me know if you need something I haven't included.