Can I simply drop the ACK of the CANCEL according to the tag to solve this problem?
The user should not be the one to solve the problem. The UA1 device has to behave properly, to keep the canceled dialog until the cycle completes. Moreover, it should match the BYE to the proper dialog or send back "call/leg transaction does not exist" when the call is no longer active.
For a long distance call, the time needed for completing the cycle will be much longer. Do you mean it can't be prevented in the voip/openser environment?
I would say no. In similar case to UA1 may be a gateway or multi-line phone which can have several calls in parallel. The UA1 must follow dialog matching specifications as per RFC3261 and everything should go just fine.
Cheers, Daniel