В общем очень жаль, что на Тостере в принципе спрашивать бесполезно.
Ответ сам нашел - для блока, содержащего весь контент страницы, overflow: hidden должен стоять постоянно, и height: auto; Для фиксации контента при отображении всплывающего окна ставим height в $(window).height() + $(window).scrollTop(). Т.е. высота окна + текущее положение на странице, а также margin-top равный $(window).scrollTop()*-1.
Чтобы основной контент страницы не сдвигался при исчезновении прокрутки страницы (а прокрутка внитри блока - это прокрутка внутри блока, а не страницы), заранее для блока с данными страницы ставим width равный $(window).width(), т.е. фиксируем ширину блока как ширина блока с прокруткой. Тогда ничего никуда не уедет.
Чтобы в самом всплывающем окне всегда показывать контент с начала, а не с места, где остановились в последний раз, делаем .scrollTop(0) для блока с контентом.
Чтобы при закрытии окна ничего никуда не ускакивало - можно перед очисткой margin-top его запоминать, умножать на -1 вновь и делать scrollTop() для всей страницы на указанное значение.