ESP8266: Differentiate wakeup due to sleep interval vs button press
One hardware solution is to use SR Latch. From description it look like the NAND one (/S, /R) would be suitable in this situation. You should be able to find a chip with such latch or build one from gates using for example 74HC00 (4 nand gates out of which 2 would be used). However one extra pin to reset the SR latch after power up caused by the external button is needed.

Connection could be as follows:


/S - connected to wake up button connected also to ESP8266. Assumed the ESP8266 wake up (/RESET) is active low, momentary switch pulls to GND, and this line is normally pulled up (like in the falstad schematic from question).
/R - connected to some output of the ESP8266 (GPIO) - you would need pull up on this pin too, so it is defined when ESP8266 is in power down
Q (SR output) - connected to some input of the ESP8266 (GPIO)


Operation would be as follows:


Pressing the momentary switch (shorting to GND) - would change state of the SR output to 1.
After boot up is finished software would read state of the Q - if it is "1" this is power up due to switch/if 0 this is power up due to timer.
Before going to sleep again, you would arm the SR latch for next power up by applying short pulse to GND on /R pin so Q would be 0.


One drawback of this solution is that after first applying power to the system (3.3V ramp up) SR latch state is unknown (either 0 or 1). This means that you might misread first power up reason but later on would be OK.

Standard disclaimer - solution provided w/o any simulation or prototyping - you should think it through, check if works at all and if is suitable for your application.