The ownCloud community dropped support for Windows Server, so I must resort to documenting such problems here instead of contributing open source.
One major symptom that confirmed ownCloud was using more than one PHP environment on my server was the presence of session handler files in more than one directory. Specifically, I was finding orphaned files in C:\WINDOWS\Temp even though my one and only php.ini production file specified a different path as well as garbage collection.
I traced the session file generation as far as the ownCloud calendar “app”, which lives in owncloud\apps\calendar\appinfo\remote.php and related places.
Debugging results were fascinating in that not only was the wrong configuration file loaded, after dumping all phpinfo() to disk I also found that the calendar app was running under an entirely different version of PHP.
The culprit: After the most recent PHP upgrade, my site-specific Handler Mappings ended up with mismatched verb restrictions. Somehow the new version ended up restricted to GET,HEAD,POST by default, while the old version remained unrestricted. Although my handlers were in the correct order to give all *.php files to the correct module, any time a CalDAV client sent a PROPFIND or similar request, IIS essentially downgraded to the unrestricted version of PHP.
The solution: Remove verb restrictions for the ownCloud site’s Handler Mappings, and then remove all but one of the PHP Handler Mappings to prevent any other versions from running without throwing errors.
If you get a bogus error about spaces in “the path to the script processor” when updating verb restrictions, just add double quotes around the path, and then click “No” on the ensuing bogus error about needing to create a new FastCGI application. (facepalm)