My guess? There isn't enough of a delay between the modprobe and the
openvpn invocation for the /dev entries to get created. When modprobe
returns the module is loaded -- but that doesn't mean the local devfsd
equivalent has necessarily caught up.
You could have the script check for the existence of the tun device and
sleep for 100ms each time this check fails (with a sane maximum number of
loops -- say, 10) before trying to invoke OpenVPN.
When you say "wait", you mean "sleep", right? (Just 'usleep 500', for half
a second, should be plenty).