Javadoc for jsf.ajax.request says you determine the calling URL by:
Determine the posting URL as follows: If the hidden field javax.faces.encodedURL is present in the submitting form, use its value as the posting URL. Otherwise, use the action property of the form element as the URL.
Looks like the MyFaces impl skips loking for/using the javax.faces.encodedURL and only uses the form action. This means ajax is broken in portlets (when using MyFaces). I.e. the javax.faces.encodedURL in the portlet case is different than the action URL and the one that needs to be used.