This is a result of the fundamental difference between how core stats and mental stats are stored for a person. There is no way to fix this issue without significant restructuring of the data and it's handling. There are no plans to resolve this in a bugfix due to the scope of the issue. I have already written code for a new system for stats, but it will be implemented as part of a rewrite (not expected to be released anytime soon).
The core stats(Str, Agi, MAf, End) are stored as base value, bonus value, and max value. The base is only the points added by the player clicking the button to add attribute points. The bonus contains all other increases or decreases to the stat. The max is used for enforcing racial limits or player character limits by disabling the addition of more attribute points, but has no impact on the bonus.
Mental stats(Cour, Conf, Wit, Charm) are stored as base value, max value, min value, gain/loss rate. The base value stores the points added when the player clicks the button to add learning points as well as the gains from all other sources. The min and max are enforced upon the base value when the mental stats are changed through the setter functions, but not when the base value is changed directly. Items and traits change the stat directly, but interactions and ending the day use the setter functions. Traits were given a dirty fix that effectively results in immediately enforcing the min and max, but this was not suitable for items. The difference in how the code handles the change means that in the short term slaves can exceed the max, but once a setter function is used the max is applied and removing the item results in a deficit. The gain/loss rate changes the rate at which stats change when the setter functions are used, the implementation varies between stats.