That’s probably due to your displayBrightness value you are goint into the timer callback.
May be worth checking the value before entering your while(displayBrightness > 30) loop.
Adding some Serial.print() statements for debugging may help locating where the issue happens.
You should also move the timer construction and the attachInterrupt() out of the constructor and rather place that into a Tent::begin() function.
That’s interesting - may need some stripped down test code to see where this behaviour comes from.
But one other thing you should change.
Your dimmerButtonPressed variable should be volatile since you are setting it from within an ISR.
Also using a global variable for classes to communicate isn’t quite the way how it’s meant to be done.
Update:
I have stripped down (and slightly altered) your project to only test the timers and that test shows it’s not an issue with SoftwareTimers in 1.0.1 so it must be something with the code that’s not present in my test code anymore
You see I’ve added some more Serial.print() statements in places of interest to see what happens when. You should do the same with your code to see when what action causes what.
I suspect for some reason your code is resetting the timers unexpectedly.
BTW, SYSTEM_MODE() has no business inside the STARTUP() macro.