Several times I've been wondering why multiple [osc~] or [cos~] are drifting apart.
Now, just found it's a bug, that is known since 2015 (!) but didn't see it come up here on the forum yet:
Pd's cosine table has some small DC-offset.
Here is the pull request:
And there the two relevant patches of this topic from the Pd-mailing-list:
demonstration of drift in FM:
workaround with symmetric and bigger cosine array and [tabosc4~]:
And in here is another patch comparing different tables:
This patch should be proper, as the array uses +3 samples for interpolation.