It's small and pretty straightforward so I took a day off and tackled this myself.
When I got the top layer off I found about what I expected, some gaps in the underlayment:
When I got it off further the reason for both the sagging and the gaps was obvious:
The "craftsmen" that did this on-site work left a significant gap that you can see at the bottom there, with nothing but shingles supporting themselves. Also the porch they put on was trusses with a single 2x4 ridge pole and some 3/4 OSB slapped over the top and a few nails driven in, guaranteed to sag badly. These guys were definitely not being paid by the hour.
I'll have this apart again in a few years, in the mean time I put in 2 more support 2x4s cut with a compound mitre (the lower one is already in place in this photo) and new OSB, and also put in some support in that little open triangle at the bottom on both sides, then replaced the roofing with new material. Total cost of the job was about $140.