**Update:**  Evidence now suggests that the API quota rolls over at a unique time for each app.  24 hours after that app-key, plus IP, combination made its first API call.  
See [this chat message][1].

----------

----------
The quota *does* reset every 24 hours, but the time <strike>seems to wander</strike> is custom for every app-instance.  Some years ago, I seem to remember it resetting around midnight UTC, but it doesn't anymore.

Recently, [the *SmokeDetector* bot][2] started logging when its quota reset.  Here are the logged times so far:

<pre>
Day and Time (UTC)      Log entry
------------------      --------------
Dec 23  6:04 PM         API quota rolled over with 2001 requests remaining.
Dec 22  6:04 PM         API quota rolled over with 2014 requests remaining.
Dec 21  6:04 PM         API quota rolled over with 2851 requests remaining.
Dec 20  6:04 PM         API quota rolled over with 4665 requests remaining.
Dec 19 11:36 AM         API quota rolled over with 2580 requests remaining.
Dec 18 11:36 AM         API quota rolled over with 2824 requests remaining.
Dec 17  ???             Site + API + Bot glitch.  Rollover not certain.
Dec 16  5:06 PM         API quota rolled over with 1030 requests remaining.
Dec 15  5:05 PM         API quota rolled over with  900 requests remaining.
Dec 14  5:05 PM         API quota rolled over with 1896 requests remaining.
Dec 13  5:05 PM         API quota rolled over with 5506 requests remaining.
Dec 12  5:05 PM         API quota rolled over with 4118 requests remaining.
Dec 11  5:05 PM         API quota rolled over with 2598 requests remaining.
Dec 10  5:05 PM         API quota rolled over with 1640 requests remaining.
Dec  9  5:05 PM         API quota rolled over with 1624 requests remaining.
Dec  8  5:04 PM         API quota rolled over with 1981 requests remaining.
Dec  7  5:04 PM         API quota rolled over with 2866 requests remaining.
Dec  6  5:04 PM         API quota rolled over with 4596 requests remaining.
</pre>

As you can see, the reset times tend to stay constant for a few days, then jump to a new time, then stay constant again.  A "punctuated equilibrium".  
<strike>We've yet to ascertain any rhyme or reason to it.</strike>  
We now know that the time changes correspond with changes to the IP/server that the app was running on.


  [1]: http://chat.stackexchange.com/transcript/message/27019800#27019800
  [2]: https://github.com/Charcoal-SE/SmokeDetector/wiki