Okay, after some good research and diving into simulation/matlab, it seems like I have quite a few bad things going on.
The number one issue is overflow happening during the summing, as well as some code bugs like sizing of a few registers.
The coefficients of the filter, even when rounded, are stable. It is the overflow that is making things act weird.
Additionally, the filter structure picture in the book is not Direct-Form 1, but rather
Direct-Form 1 Transposed. In this forum, it is stated that Direct-form 1 Transposed filters "should never be used in fixed-point implementation because the poles come first resulting in overflow in these two cases."
I am sure you can use them, but you need some logic to handle overflows.
There is also this online book
https://ccrma.stanford.edu/~jos/fp/Direct_Form_I.html That talks about how you can ignore overflow as long as the output signal is in range, but it does not state this in the section on DF1-T, so I am going to assume you cannot ignore overflow for DF1-T
I will work on a DF1 code and post it if it works.