Ok I found my answer.
To quote Darin Dimitrov here:
"Unobtrusive validation doesn't work out-of-the-box with dynamically added elements to the DOM - such as for example sending an AJAX request to the server which returns a partial view and this partial view is then injected into the DOM.
In order to make it work you need to register those newly added elements with the unobtrusive validation framework. To do this you need to call the $.validator.unobtrusive.parse on the newly added elements. You should put this code inside the AJAX success handler that is injecting the partial into your DOM."
The framework calls this method one time on page load, the problem in my scenario was that the form itself was a jquery dialog and so even the initial load was "dynamic". I had to register the form elements with the unobtrusive framework on dialog load:
$.validator.unobtrusive.parse('#registerForm');
My ajax calls would also return and replace the form like so if it did not validate on the server-side:
registerDialog.empty().html(result.viewResult);
so I had to call parse() on the success callback as well to make sure validation continues to work after an ajax submit.