別にdisposeの重ね掛けでエラーは起きないだろ。あるとしたらnilが入ってる?
間違いなくスクリプトの競合エラーの類だと思う
本当の原因はこの程度じゃ類推出来ない。不安ならif文使っておけ

@savefile_viewport.dispopse if @savefile_viewport

適切なdisposeを怠るとメモリ問題を起こす可能性があるけどviewportの影響なんてタカが知れてるしよく分からない