I've attempted to package vikmalik's insightful workaround as follows:
With VPN down run:
echo list | sudo scutil | grep DNS
with VPN up run the same:
echo list | sudo scutil | grep DNS
You will notice one extra state. In my case it was:
State:/Network/Service/BA3F9510-ED70-4AF9-B776-89EFDB500789/DNS
Now with the VPN up you can remove the state with:
echo 'remove State:/Network/Service/BA3F9510-ED70-4AF9-B776-89EFDB500789/DNS' | sudo scutil
Afterwards applications, such as ping or chrome, will be able to resolve hostnames again while VPN is active. You'll have to remove that state every time the VPN is established. Fortunately, the state string doesn't change and you can alias the command.