I realized it looked like the usual exponential charge/decay waveform that happens when you LPF a square wave, so I think it was just ripple from the PWM input, not op amp oscillation.
That was my first thought when I first saw it so I increased the delay and it didn't affect the duty cycle of that triangle waveform. Commenting out the serial prints didn't affect it either.
I eventually started moving the mosfet around and found that if I moved it to a certain position that oscillation went away.
after I went to bed last night I realized
I call that "background processing".
The brain reviews all data collected while you are sleeping and checks it for anomalies or similarities.
I have fixed circuit boards in my sleep this way after a whole day working on them at work. (fortunately I don't have to do component level troubleshooting anymore. I went back to school to get my degree so I could get out of that kind of "grunt work". (chained to a bench)