Controller.TryUpdateModel<TModel> (and hence UpdateModel) uses typeof(TModel) instead of model.GetType() to determine the model type. I see almost no benefit to this. As a result, compile-time rather than runtime type knowledge is used, even though the properties will be bound via reflection anyway!
The fix would be to change the two cases of typeof(TModel) in TryUpdateModel to a call to model.GetType(). Note that model is required to be non-null anyway.
The workaround is to re-implement TryUpdateModel in your own code (ugh!) or call it via reflection (ugh!).