The javadoc of UIViewRoot says this:
"... Take the following action regarding PhaseListeners.
... Initialize a state flag to false. ....
... Upon return from the listener, call FacesContext.getResponseComplete() and FacesContext.getRenderResponse(). If either return true set the internal state flag to true. ..."
Here we have a small misunderstanding. The algorithm always check for responseComplete or renderResponse even if there is no phase listener set or there is no change on the state flag.
This issue has minor priority, because it does not have any effect in normal situations, but it can be seen in some special tests.
This affects 2.1 and 2.0 branches, but since it does not change anything it will be fixed only in 2.2.