Оказывается, что по какой-то безумной причине диалоговые окна отображаются только в исходном переднем буфере, даже если этот буфер был заменен, а исходный задний буфер теперь является передним буфером (отображается на экране).
Решение состояло в том, чтобы отслеживать, сколько раз буфер менялся местами, и заменять его снова, если число перестановок было нечетным (что приводит к тому, что исходный передний буфер всегда будет текущим передним буфером, когда диалоговое окнопоказано).