The graftcopies function does something very strange (maybe even wrong), it
calls _filter with a pair of changeset that does not match the one used to
compute the copies informations.
We are about to do some rework of _filter to make it closer to its documented
intent and fix a couple of bug. This means some of the logic that only make
sense for graft need to go somewhere else. We add the extra filtering with
proper documentation to graftcopies.
That sounds pretty bad (creating a filelog entry with two parents for a non-merge commit), even though I'm not sure what user-visible effect it would have. Could you add a test case demonstrating the bug?