Could it also be related to changing the headcodes?
In some cases yes, pretty much that reason.
There was a thread some time ago where change of headcodes on the route was discussed and the Cannon/Cross loops came up. Consider that the unit goes in a loop but the service does not. There is a split in the service because the unit changes headocdes halfway. In some cases the final destination is Slade Green. It just restarts from there as a Cannon Street/Charing Cross in the other direction. In some cases it starts back from Crayford (headcode switch) and others Barnehurst (headcode switch)
Some of these services never change headcodes so will appear as loop services online. It does depend on where you consider the service to 'Terminate' Just because the unit goes round and round, doesn't mean the service does.
Consider this. If you are standing at Cannon Street waiting for a train. Would you need to get on a train to Cannon Street ? Advertising a Cannon Street service whilst at Cannon Street seems pretty illogical. If you got on that train and it announced; "This is the Cannon Street service" I'm pretty sure it would cause confusion. Even if it was a loop service where the headcode remained the same I doubt you would get on it to your destination.
If you wanted Sidcup. You would get on a train to Sidcup using the most direct route. I very very much doubt you would get a train to Sidcup via Slade Green. I drive these service a lot. They empty out by the end of the route. Not many travel round the loop stations.
Imagine the carnage if ever station along the route had Cannon Street/Charing Cross advertised on both the up and down platforms simultaneously. Slade Green is a bit of a pain in that sometimes it does but they all state 'via' so its less of an issue. Its also slap bang in the middle so your more looking at going somewhere intermediate than destination.