Reason: When you tried to use '-ivh' due to some reasons complete package is not installed properly.
Difference: Where -ivh will install the package but if there is any pre-installed or the package is not installed properly then you will face the issue.
But when we use '-uvh' then first this will uninstall the previous version and install the new version. So if there is any broken file then that will be removed and install again.
For more information check this puppet tutorial.