The portal's request wrapper calls getParameterMap() before setCharacterEncoding is called. This results in the default encoding being used and problems with UTF-8 request data handling.
Fixed by moving request.setCharacterEncoding to the top of the servlet request chain