To be clearer, I've guarded project-try-vc with advice. Perhaps a user option to enable the guard intrinsically would be better as everyone could benefit. I have my own option variables doing this so I can enable it when wanted.
Perhaps Ergus can give something similar a try and see if this solves his immediate hanging concern.
Ergus, you should be able to just drop the below snippet in your init file (or eval in *scratch*) and see if it works for you.
(defun my/project-try-vc-advice (orig-fun dir)
(or (vc-file-getprop dir 'project-vc)
(if (file-remote-p dir)
nil
(funcall orig-fun dir))))
(advice-add 'project-try-vc :around #'my/project-try-vc-advice))