After doing some profiling it was clear that the ImagePool and inline image cache were holding on to too many image objects. And as a result the garbage collection times went up significantly as the capture proceeded. I refactored the ImagePool and inline image cache to use a WeakHashMap. The results where quite significant, render time dropped from 16 to 4 minutes. And the maxed used heap dropped from 1038MB to 559MB. The attached graphs are worth 1000 works as they show the before and after heap profile of the capture.
Top image is heap for an 18 page run, button image is the same run but after the cache changes.