エラーの内容は
CDERR_INITIALIZATION(0x0002)

そこからぐぐって、原因がわかりました。
ofn.lpstrFile = szFileName
の場合
szFileName[0] = '\0';
しておかないといけないようです。

猫プロにもそんなこと書いてなかった(´・ω・`)

推測するに、ダイアログPROCの中で確保したローカル配列変数は、0で初期化されていない。
たまたま猫プロはグローバル変数であり0が入ってた。
たまたまダイアログ作る前にWinMainで作ったローカル配列変数は0が入ってた。

ということでしょうか。なんてこったい。