This issue is caused by a reactor that contains a plugin that it also uses from the parent POM, where that plugin POM lists the parent POM as its <parent/>. When the parent project is loaded, a project reference is established between the parent and one of the child projects (the plugin project) even though the plugin referenced by the parent is an OLDER version. When Maven attempts to calculate the concrete state for one of the POMs in this scenario (I'm not clear on which one instigates the problem, though it's probably the first one encountered), it recurses infinitely between parent and child because of this [potentially erroneous] reference.

The reason this has happened in the 2.1.0-M1 release candidates is because the processed project cache isn't passed down through the recursive calls from calculate* methods to restore* methods, and the current project being processed isn't marked as processed until near the end of the method. By marking it processed first thing, and passing a COPY of the processed project cache to the restore methods, we avoid infinite recursion. We have to use a copy to ensure the restore methods don't alter the set inappropriately.