First of all, I didn’t know this until now so nice find!
I also tried it with iOS and MobileElement but results are still the same. So I think it leaves us with this: IDs generated by Appium does not work as pointers (as I thought before)
findElement generates a MobileElement or an AppiumWebElement based on the element you pointed at it, and it seems it just gets all relevant data about the element (attributes, coordinates etc.) and creates an object based on the properties.
Other than the properties, the IDs set by Appium are generated randomly; you can even set them as you like.
Regarding your problem with comparing two elements, my advice would be comparing coordinates and/or sizes, considering the screen stays the same between fetching the elements.
Good luck