Okay this is much simpler than I anticipated - the better quality roboports mod handles all entities based on original roboport blindly without checking it actually is a roboport. To fix just replace the first function in control.lua of the better quality roboports with this function (it just adds entity name check):
local on_built = function (data)
local entity = data.entity --[[@as LuaEntity]]
if entity.quality.level == 0 then return end
if entity.name ~= "roboport" then return end
local surface = entity.surface
local info = {
name = entity.quality.name.."-roboport",
position = entity.position,
quality = entity.quality,
force = entity.force,
fast_replace = true,
player = entity.last_user,
}
entity.destroy()
surface.create_entity(info)
end