This is still a bit of a hack, but seems to work in all cases I need.
I created a sleep_exec script as follows:
sleep_exec
#!/bin/bash -norc sleep $1 shift exec "$@"
Than changed my wrapper function to run
tmux new-window -- sleep_exec 0.5 vim "$@"