В общем проблема ясна. Сигнал paintRequested отвечает и за вывод в preview-диалоге, и за печать на принтере. То есть диапозон надо отслеживать в привязанном слоте.
int fromPage = 0, toPage = INT_MAX;
if (printer->printRange() == QPrinter::PageRange) {
fromPage = printer->fromPage() - 1;
toPage = printer->toPage() - 1;
}