Actually I’m fairly certain it is because Sonnet 4 and Opus 4 don’t use the same method of applying edits. Other models use the apply method where it summons another smaller custom model to apply the edits proposed by the model in the way you describe, but I think Sonnet/Opus 4 are directly using a string replacement tool.
I’m pretty sure this is also related to another issue that is specific to Sonnet/Opus 4 where the “restore checkpoint” button doesn’t work if the files that were edited were not manually included in context.