I got caught out by this when I started AppGameKit, It's just too fast to see.
As stated already pressed and released are one loop deals and are changed on the sync(), so assuming the pointer is pressed during loop 10 and released during loop 90 (registered by AppGameKit during sync() at the end of the loop), in truth table for this would give;
p r s
Loop 10 0 0 0 Pointer press registered at end of loop
Loop 11 1 0 1 Pressed() returns 1 for this loop only, State() returns 1
Loop 12 0 0 1 Pressed() returns 0, State() returns 1
...
Loop 89 0 0 1 Pressed() returns 0, State() returns 1
Loop 90 0 0 1 Pointer release registered at end of loop
Loop 91 0 1 0 Released() returns 1 for this loop only, State() returns 0
Loop 92 0 0 0 Released() returns 0, State() returns 0
So getPointerPressed() and getPointerReleased() are set for the frame where getPointerState() changes to 1 and 0 respectively.
Nothing new, just another way to explain it.