This is actually a rather old bug that was fixed in 2.1.3, but for some unknown reason the bug was reintroduced in 2.3.3.
The PortletStateInterceptor merges the old stack with the current stack during the render stage. It should add the old root to the beginning of the current root. In 2.3.3 it now adds it to the end.
This puts the DefaultTextProvider above the Action class, which breaks a bunch of struts tags if your action implements TextProvider.
Unless there is a reason for the change, the simple fix is changing root.addAll(oldRoot); to root.addAll(0, oldRoot);
I had created a stackoverflow question that explains the issue in detail.