The bad habit (and being lazy) would be to not bother understanding why something is good or bad and always use what others tell you is more often good.
That's quite possibly the best advise of all the posts within this thread. Once you can truly understand ALL the reasons behind making any given choice (whether writing code, or IRL), you can be more confident of having selected the optimum choice. When you make choices using only some fraction of knowledge, you're inherently risking a poor choice, particularly in 'fringe' cases. This doesn't always mean the worst will happen, but you ARE somewhat relying upon Murphy taking a holiday.
I would like to touch on my display update code...
And this is a perfect example... I hadn't considered you were using a multiplexed display (and you hadn't told us... LOL). In hindsight, it's quite logical to multiplex the display and almost every clock out there does precisely that!!
Once I've implemented a nested interrupt: The interrupt function was called with 1 kHz. It then resets the interrupt flag, so that the interrupt could trigger again. The interrupt function itself was two parts: a fast part, which updated and averaged sensor values, timestamps etc., with the full 1 kHz. The other part was executed every 64th time, resulting in a frequency of 16 Hz (doing some floating point PID calculation, key debouncing, menu logic etc.). This slower part was interrupted by the fast part. So a kind of prioritized task manager, but with deterministic update rates for the fast and the slow part.
This can get rather complex in a hurry. Firstly, you have to be very careful to save the interrupt context in an atomic fashion (with each nesting of interrupts savings its context in unique memory areas), and then you have to add in the complexities surrounding re-entrant code fragments. While I'm first to admit that there's a time and a place for almost everything, I'm equally quick to state that I only take options like this when there's absolutely no others available. (And that includes asking myself whether I've selected the right microcontroller to begin with! For example, it might be a 'better choice' to use PIC18 family devices with dual priority interrupts rather than trying to use PIC16 family devices?) I'm trying to recall if we have ANY code remaining that still folds the bottom half code of the ISR back into the ISR itself... I doubt it!