If an evacuation failure is seen during object copying, we still have to proceed with the scanning of the remaining roots and RSets. Objects for which we fail to allocate space are self-forwarded (i.e. they are forwarded to themselves). This means that for many, many object copies we are going to execute the allocation path (attempting to to allocate a PLAB, and hence attempting to allocate a new GC alloc region) many, many times. Most (if not all) of these allocation attempts (of GC alloc regions) are doomed to failure.
We should be able to reduce the time of pauses that see an evacuation failure if we reduce the number of times we execute the slow path when an evacuation failure is seen.