Ha!
It's always the things that "are correct for sure" that bite you!
Turns out just printing "Yey!" wasn't so smart, the parameters I passed to dataChanged were wrong and so the filter proxy didn't let the signal through.
I emitted like this:
@emit dataChanged(index(id, 0), index(id, columnCount()));@
When I should have emitted
@emit dataChanged(index(id, 0), index(id, columnCount()-1));@
Obviously ;)
Sadly this "column out of bounds" situation doesn't produce any qDebug output in the model or view, but is silently turned into column id -1 and row id 0 (!). Sneaky.