The following is from the description of the RequestDispatcher.include() method:
The ServletResponse object has its path elements and parameters remain unchanged from the caller's. The included servlet cannot change the response status code or set headers; any attempt to make a change is ignored.
Correct, you cannot do anything that requires changing headers or return codes.
More precisely stated: any changes you make to the headers or the return code are ignored. So the <c:redirect> tag is probably working perfectly; it's just that its results (setting the redirect headers) are being discarded.