The two reads
A boolean for held and a one-frame flag for pressed. Naming them differently is what keeps the two uses apart.
Where input is lost
A press that arrives between frames has to be buffered. Clearing the buffer before the rules read it drops the input.