The problem is likely because the node with this script attached gets freed before the new scene can be instanced.
What does the code look like when you are using call_deferred? Did you use call_deferred("add_child", arrowInstance) or get_parent().call_deferred("add_child", arrowInstance)?
One way that might help fix this issue is to create a signal in the arrow scene that is emitted in the arrow's _ready function. Then connect that signal to the node that spawns the arrows and in the connected function free the node using queue_free. That way the node that spawns the arrow will only be freed once the arrow has be spawned and initialized.
Another thing to try that might fix it is to add the child node before calling queue_free.
I don't know if either method will work or not, but it might be worth a shot.