Cause: libvirt was depending on a "change" notification from the kernel to indicate that it should change the name of the device driver bound to a device. That change notification is not actually being sent.
Consequence: the output of "virsh nodedev-dumpxml" for a device would always show the device driver that was bound to the device at the time libvirt was started, NOT the currently-bound driver.
Fix: libvirt now manually updates the driver name every time a nodedev-dumpxml is done, rather than depending on a change notification.
Result: The driver name in the output of nodedev-dumpxml is now always correct.