As indicated above, the first item is by design - only one g-code command runs at a time - if new commands are issued (and gcode_button issues commands) then they are appended to a queue and that queue is run in order.
I don’t know why button releases would not be reported correctly. There was a similar report at QUERY_BUTTON unreliable .
-Kevin