Wäre es nicht viel einfacher, die Daten mit html_entity_decode() (http://php.net/html_entity_decode) zu konvertieren?
Sofern ihm das zur Verfügung steht, kann er damit die &-Sequenzen nach utf-8 umwandeln, muss dann aber immer noch sämtliche Bytes zwischen 128 und 255 (deutsche Umlaute und vieles mehr) selbst konvertieren, da auch diese Zeichen nicht in utf-8 als solche, sondern als Zwei-Byte-Worte vorkommen.
Bei der Ausgabe dieses Textes in HTML sollte dann wiederum htmlentities() mit entsprechender utf-8-Angabe angewandt werden, zumindest aber htmlspecialchars() in Verbindung mit der Angabe utf-8 in Content-Type (was allerdings bedeutet, dass auch der gesamte Rest der Seite in utf-8 sein muss).