I believe this is working as intended. KML.load always removes all data and recreates it, which means it’s actually creating an identical (but not the same) entity every time you call load. This is why the infobox goes away, the old point was removed. This is even the case in Google Earth if you use a refreshing KML link, the balloon goes away. This is a side effect of the way the KML spec is written.
The correct way to do this in KML is to use NetworkLinkControl’s update field: https://developers.google.com/kml/documentation/kmlreference#networklinkcontrol which unfortunately Cesium does not have support for your (though we would be happy to look at a PR to add it if anyone wants to work on it).
A potential workaround would be for you to track the selected entity and set it back programmatically after you call load (but that still might result in the infobox blinking off and then back on again).
Sorry I don’t have a better answer for you, but we do plan on continuing to improve KML as time goes on.
My preferred solution (though I’m obviously biased) would be to use CZML for this instead, but I understand many users have a library of KML they need to support so this solution isn’t always viable.