Thanks for the detailed test case and thanks for finding these bugs in the Intersect() search, it's nice to have someone testing it out.
Your analysis is pretty spot on, it's not handling paged searched properly and it's it linked to the position in the index. If the "set" of docs matching each sub-query are at the start and the end of the index, then we never find them. At the moment it doesn't try enough times to find a "page" of intersecting docs, it in effect gives up after 2 failures.
I'll have to think about a better way of handling it though, because we need an efficient way of doing the intersection. On one hand, we need to be keep going until we're sure we can't get a complete page of intersecting docs. On the other hand we don't want to key trying in the scenario where there are actually less than a page size worth of intersecting docs. I'll try and come up with something in the next couple of days.