Для печати документа вы используете:
PrintDocument.Print
При предварительном просмотре Вы присваиваете PrintDocument для PrintPreviewDialog
printPreview2.Document = ItemsPrintDocument;
Когда вы показываете PrintPreviewDialog, он заменяет PrintDocument PrintController на PreviewPrintController и вызывает PrintDocument.Print.
Это действие создает список изображений (метафайлов) по одному на каждой странице.
Затем он восстанавливает оригинальный PrintController в PrintDocument и показывает изображения.
Когда вы нажимаете кнопку PrintButton на PrintPreviewDialog, он вызывает PrintDocument.Print с оригинальным PrintController.
Обратите внимание, что для правильного поведения вы можете использовать событие PrintDocument BeginPrint, чтобы инициализировать переменные для нового PrintDocument.Print.
Если вы используете PrintPreviewDialog, вам не нужно вызывать PrintDocument.Print.