I did some digging around after the submission, and I'm not completely sure what causes it because there's some weirdness to it, but I have some guesses. It's definitely not a Time.deltaTime issue, seeing as I'm using Microsoft's WPF for this and not Unity, but the most likely cause is that WPF's Opacity feature is horribly optimized, combined with me using Grid elements for positioning (if you see an element anywhere on screen, it's likely wrapped in 2-3 layers of grids, and some buttons have text on them which requires yet another grid for margins), which also have fairly bad performance compared to other controls that I could have used instead (I wish I had learned this a while earlier, but alas).