I have the impression that the parameters locks are not all equal in size, and some actions are filling the P-lock count more than other.
for example, changing the filter type seems to make me hit the limit, when on the same project, I could still add 1 or 2 cutoff P-lock until limit is reached.
P-locks are not using memory on a per-lock basis but rather how many parameters are being P-locked per pattern. This means that adding a lock to Cutoff (for example) equates to one array of p-lock data (of n available), and subsequent locks to that specific parameter does not add up towards the limit.
The limit is hit once you have added the maximum amount of total locked parameters possible.
So this means that if you have locked the max number of parameters and try to P-lock a parameter that is not already in “lock memory” it will not be possible. You can however keep adding locks for parameters that are already in the lock memory.