悩んでいるバグを修正できました。
原因は予想通りくだらないミスでした。
C#で普通に画像を拡大すると、縁の色が背景色と混ざってしまいます。
MultiWallpaperではそうならないように特別な処理を行って拡大しています。
その処理を行っている関数は引数、返値ともにImage型なんですが、拡大する必要がないときは画像ファイルのImageである引数をそのまま返していました。
後はお分かりの通り、関数の返値をDisposeしたら画像ファイルのImageもDisposeされてしまいましたとさ。
画像ファイルの大きさとモニタの解像度が一致しているときにしか発生しないバグ…なかなか再現できなかったわけです…