By playing with default values, I've confirmed that the service is not being run at all! This doesn't make any sense, because everything appears to be set correctly.
When I access the JSON directly (http://URL.com/WHATEVER.php?a=1&b=2&c=3) the JSON executes correctly. (It also updates a MySQL table, so I am able to confirm the script is being run that way) However, when I load the screen, my database remains unchanged, indicating that the service is not being run.
Note my settings for the service in the image below. It should be working! When I test the service using the "Test" feature using the same parameter values, it works correctly. However, when I test it on the screen itself (forcing the same parameter values, avoiding local variables etc) the service does not run.
How can I troubleshoot this? The problem seems really illogical to me. It shouldn't be occurring the way it is.