I have this problem too.
ntp is in sync on all machines, TZ data too.
What I realised is, that the EPG is fine for "local" TVs - I receive like ~100 IPTV channels and "local" means with origin in the same country, or just around. There is EPG correct.
The shift happens with TVs with "global" coverage and no "localised" adaptations, like National Geographic for instance.
But from what I can say, If I compared the source webs for the XMLTV content with EPG I see, that looked fine - what would implicate either the source Web data are already shifted...
Hard to pin point this