assume foo-1.0 provides [filename] and is available in repo |A| assume foo-2.0 does NOT provide [filename] but foo-bar-2.0 does. Both are available in repo |B| install foo-2.0. If both repo |A| and |B| are enabled and you run yum install [filename] yum will choose to install foo-1.0 from repo |A| to satisfy your request. yum then realizes that you have a newer version of foo already installed and does nothing. This leaves you with yum thinking everything is good, but in reality it didn't install a package which provides [filename] yum should find foo-bar in repo |B| and install that package to satisfy the request.
Ok, so if the obsoletes are there then "yum update /path/to/file" works atm. As the simple update will install foo-bar as well. However doing the update of just foo and not foo-bar, and then doing a "yum install /path/to/file" fails (it prefers the old foo over foo-bar, because a version of foo is installed). This is fixed in upstream commit: b5bcc39f50bf7fa1d510a01182ee69b3366511cc