This seems likely to be related to the fact that overflow:hidden creates two frames, one nested inside the other (the inner one having an anonymous box style).
I think the problem here is that nsDisplayTransform::GetResultingTransformMatrix (in layout/base/nsDisplayList.cpp) should replace:
2539 const nsStyleDisplay* parentDisp = nsnull;
2540 if (aFrame->GetParent()) {
2541 parentDisp = aFrame->GetParent()->GetStyleDisplay();
2542 }
with:
const nsStyleDisplay *parentDisp = nsnull;
nsStyleContext *parentStyleContext = aFrame->GetStyleContext()->GetParent();
if (parentStyleContext) {
parentDisp = parentStyleContext->GetStyleDisplay();
}
so that it gets the perspective from the style parent.

Created attachment 585545[details][diff][review]
Check style parent, instead of frame parent
Thanks for looking into this dbaron
Requesting aurora/beta approval since this fixes a bug with our implementation of 3d transforms. Should be very low risk, and well covered by tests.