This worked! I honestly don't know yet how this is different than my failed one. I have to brush up on my knowledge on the logic scan and output update. Thanks
Yah, in your original (below), the motor is on (M is 1) on the scan that starts after the (HMI PB) is released (changes from 1 to 0), so when the scan executes that rung, the instructions along the path [XIC M=1] => [XIO (HMI PB=0)] all return true, so the motor stays on (the rung feeding the [OTE M] instruction is true).
For any need to brush up on reading ladder, I very,
very strongly recommend Ron Beaufort's youtube series, see
here; spend the time on those eleven videos, each taking less than 10 minutes, and in less than 2h (plus any recycling) you should know everything you need to know to read ladder. Note especially Ron's jargon: rungs are true or false; bits are 1 or 0. Ron does not mix and match the wording e.g. "set a bit true," or even "set a bit to 1," are not used. 95% of time I could get away with that language, but when the wheels come off and it gets confusing, dropping back to Ronspeak often puts the wheels back on.
The problem is that the (M) bit,
which is the seal-in, can hold but two states: 0 for motor off; 1 for motor on. When M is 1, there is nothing spare to store
why it became one.
That is why @parky's and my two solutions require additional bits. In the latter 7-instruction solutions, rather than store why the motor is running i.e. why M is 1, the extra bit informs the process that the (HMI PB) has a 1-to-0 transition, which is interpreted as a momentary-run period ending, which is why it turns off a motor that was running before the HMI PB was pressed (become 1).