ずーっと以前(.NET Framework2.0が最新だった頃)に作ったプログラムで、印刷ができないので直してくれ、との依頼があり、調査したところ、どうも64ビット版のWindowsの場合のみに発生する現象のよう。
で、スクリーンキャプしたものを印刷する機能で、キャプチャするのにWindowsAPIを使っていたから、その辺かな? でも、.NET Framework2.0からスクリーンキャプチャするAPIが追加されてるみたいだから(今頃知った)そいつに書き換えて試してみよう、ということで、やったのですが、うんともすんとも言わない。
どうも PintDialog.Show で止まってる、というか、何も起こらない(エラーになるわけでもない)。

windows 64bit PrintDialog でぐぐったら、

PrintDialog.UseEXDialog プロパティ

 というものがあり、MSDNのドキュメントをよむと、

AMD64 プロセッサの場合、このクラスは、UseEXDialog プロパティを true に設定しないと動作しない可能性があります。
とのこと。

なんだそれ? と思いながら早速該当プロパティにTrueをセットして、実行してみたら、あっさりOK。

1時間の試行錯誤が無駄だったようです。
 
MSDNを読んでもこのプロパティだけ説明が一切ないというのが凄い。