I stumbled over exactly the same issue today, tried to narrow it down by adding debug messages to the script, and suddenly it worked.
I think the bad guy is [ "$dhcp" != 'no' ] && dhcp_up which returns 1 in case no dhcp is used. Maybe using "if" here is better... Also handle_iptable (in vif-common.sh) only does a "return" which again returns 1. Maybe using "return 0" here is better... The question (for me) is why this leads to an exit. Even if "set -e" is used in some scripts, why does it exit at handle_iptable() and not already after the false [ "$dhcp" != 'no' ]? Stephan