As an update, I was able to recreate what everyone else in the thread is saying: On a separate (non-shared) runner, everything works fine. So the workaround for the issue is to set up your own runner. Upsides are that it's actually pretty easy and quite a bit faster than shared runners, downsides are that you have to have a spare machine somewhere to put the runner on.
I've sent this info to the GitLab runner team, but since it seems to be butler-specific (downloading butler works fine, connectivity to api.itch.io works fine) there's probably not going to be a fix coming anytime soon unless someone's really willing to dive into it.
I'll update the thread if anything changes; thanks again to everyone for reading this and the advice!