The activation would occur once a fork was detected violating protocol (likely oversize blocks) with a majority of hashpower. The threshold and duration for activation would need to be carefully considered.
A big issue with this is that although online nodes might be able to detect a long invalid chain, nodes that were offline at the time (or didn't exist yet) have no way of independently verifying that invalid blocks actually existed then. Maybe the invalid blocks were created much later in order to trigger a PoW change earlier than appropriate on some nodes, splitting the network.
You could make a rule that a block is allowed to change the PoW if it presents headers for an invalid chain of length > 50 or something, with the fork point close to the new-PoW block. So once a long invalid chain comes into existence, anyone can create the first new-PoW block containing the invalid chain's headers. This can be more readily verified later on.
Exactly what the new PoW should be is a complicated issue with years of past discussion already...