Did you get this fixed? I'm not familiar with shell scripting, hence I might be more hindrance than help, but no one else is posting, so...
1) I'd be inclined to rewrite the script to handle errors, rather than just assume they won't occur.
2) Why not upload a copy of your update.zip & maybe someone will try to test it? (obviously after backing up their own /system & /data)
3) In the new_font case, say, I understand looking in /system but why/where is there also a copy expected within /data to replace?
4) In find_replace_file, why is the 2nd -name pattern "$1" rather than "$nfile"
5) In find_replace_file, why is the destination for both cp's rfile & not $rfile?