I removed my margins and the test case I submitted worked. I have been able to reproduce the issue in another test case (the code is attached, it uses the same images as in the first post). This new test case does not have any margins on the page and the fo:block-declarations have been moved in a little so they are not touching the edges.
In the new test case, the component #7 moves onto two pages. If any other component is removed (try component #4, the yellow image, as it seems unrelated) then component #7 is now on one page again.
I have found that this appears to affect the last component that appears in the code. If I move component #4 underneath component #7 in the code, then this breaks over two pages.