Since I don't have DaVinci Resolve, I tried it (your second solution) on another app (Safari), and it worked fine. It did not fail in the way you described it. Perhaps you should try that test to confirm my observation. Try it on a few apps. If so, that suggests that DaVinci Resolve has something to do with the problem.
My initial (and very tenuous) guess is that DaVinci Resolve is telling macOS to clear keyboard and mouse buffers, causing macOS to force a release of the C key. I'm not sure if KM can work around that feature, but perhaps. If the problem is with DaVinci Resolve's handling of input buffers, (which is just my working theory) then it could be very tricky to make a workaround.
Is this macro your final goal, or is this just a test to get something else, something more advanced, working? Do you care to elaborate on why you are doing this? You don't have to, but half the time explaining the real goal can help get a better solution.
I found the words "DaVinci Resolve" in your macro... that's how I knew.
Your test with Chrome and an editor confirm what I had found... that your macro works in any program except DvR. That may mean that my guess about DvR clearing the buffer might be right.
Since I don't own DvR, I don't know what snapping means. Let me take another guess... can you use a Mac keyboard modifier key (like CONTROL) instead of the G key as a modifier key? Also, if you do it that way, you can probably get KM itself to press and hold the G key which might give you the result that you want. This might be a solution for you. I'm not at all sure, though.
Very good. I would estimate that 50% of all questions are from people trying to solve a problem one way, when the best way to ask the question would have been to state the original problem rather than the current implementation issue. But in this case, it's not clear that my idea will solve your problem.
Isn't there a famous song from a rock group that says,
Now don't be sad, cause 9 out of 10 ain't bad.
Quite often when you get something that works 90% of the time it tends to be possible that the remaining 10% is caused by a timing issue. Typically you can solve timing issues by adding pause statements between certain KM actions. Once it works 100% of the time, you reduce or eliminate the pause statements until it still works, but just barely. Then you increase the pause statements again a little bit as a buffer.
Once again, my advice is based on instinct (and a little experience) here.