I think you misunderstand indexes in this case. You add one page (bottom or top, not relevant). That is your index 0. When you do this:
topItems.Remove(bottomPage);
You're removing the element from topItems...if that was the only element, your next reference
var topPage = topItems[0];
will be out of range.
Put a breakpoint into the method and go step by step.