Oops, my mistake, you're right (that is the proper opener when running a shell from recovery...the line I used is for running a shell when the system is online)...was not thinking (what's new right?)...the opening line should be as you noted:
#!/sbin/sh
Not totally sure, but maybe my bad opener is why you got such odd results (dunno if ya noticed, but it looks the the build.prop files are different formats for some reason). Did you use my bad opening line or your correct opening line?
Not totally sure, but it looks like you ran the script in ScriptManager, right? Maybe this explains the odd results.
Post your updater and prop scripts, maybe there are some typos or something given you got a syntax error...I am curious because, aside from that bad opener, I am quite certain the method I outlined should work...maybe the method I described is flawed I will do some testing.
===EDIT===
Okay did some first hand testing and made a zip with the correct opening line

...the method I described worked...not sure where your test went wrong, unless you used the bad opening line.
Attached a screenshot as proof and attached the test zip I made so you can copy and paste from it if you want

.
Also I was thinking, it might not be a bad idea to add something like this to the buildprop_additions script (before the part where you start making the actual additions, obviously):
Code:
if [ ! -f /system/build.prop.bak ]; then
cp /system/build.prop /system/build.prop.untweaked
fi
that way it will make a backup for the user (if they don't already have one) just in case something goes wrong...it would also be good for you should you ever want to make an uninstaller zip.
EDIT#2 - Or you could get rid of the if statement and just use the cp command...this may actually be a better idea since the presence of build.prop.bak would imply that the build.prop currently in use has been modified.