After digging in the source code, I confirm the tags are correctly removed from the ability system component when the ability ends.
The problem lies in the output of the owned tags I display each tick.
I also tried with the built-in GetDebugStringFromGameplayTagContainer, but with the same outcome.