Just in cast someone in the future is reading this, I want to fully explain what happened.
I was running this command from a Windows Command Batch file (.bat). In a batch file, %2 has a special meaning. It indicates that before the line is executed, the %2 should be replaced with the second parameter that was passed to the batch file at the start. In this case there was no parameter passed to the batch file, so %2 was replaced with an empty string causing "%20" to become just "0".
%%20 worked because %% tells the batch file processor to not do the substitution, which made it work as needed.
If this same command line is typed directly to the command prompt, the double %% is not needed and will not work.
If you pass the command to Curl from within a running program that does not use the Batch File Processor, do not use the double %%.