Facing to real world feedback designs (here, Constant Current Generator)
It is not usual to use OA2. Instead use R2/R3 to divide down the 3V3 reference signal, and apply Rsense signal to OA1 inverting input directly. IF there is no PWM component or modulation component in this loop then it will usually be DC stable without any thought or effort. 

You mention PWM in the text but do not show it on the diagram.
Where do you intend to apply PWM?
Do you want PWM frequency to appear at / modulate the LED? and/or are you applying a fast varying signal such as audio to modulate the PWM mark space ratio?
If not then there is "too much thinking" happening :-)
(unless PWM modulation is required on the LED or raw PWM is required on LED and the PWM "frame rate" is very high and the PWM mark / space varies rapidly.)

See diagram below - usually good enough.
PWM could be applied as eg smoothed DC to 3V3 point IF modulation not required. 





ADDED:

Slow PWM &lt; 10 Hz: If the LED is only on or off and not modulated at 10's of Hz or higher then slow on/off can be applied as shown in your diagram.My circuit with one less opamp section has no practical disadvantage that I'm aware of. [If it has any known practical disadvantages that I'm not aware of or have overlooked I'd be genuinely happy to hear of them].  Faster PWM will be affected by R2 R3 time constant effects but with R3 = 470 R and the stray but OA input capacitances concerned, OpAmp slew rate and bandwidth is also likely to matter with an LM324. 

Dimming only: If you just want dimming then just RC filtering higher frequency PWM (say 1 kHz up) and applying the DC to OA1+ will do what you want. If you want a comprehensive theoretical analysis I'll leave it to the people who enjoy such things. (Theory get applied when needs-must, but when needs-mustn't I usually prefer to do other things :-).

More relevant theory which 'leaks over' into practice in this case:

Your 100:1 divider delivers ~= 33mV at the sense resistor for V_PWM_max.
3.3V x 470/47470 = 32.67 mV ~= 33 mV

That's applied to an LM324 input with an input offset voltage of +/- 7mV max at 25C or 9 mV max 0-70C. Typical offset is +/- 3 mV or about 10%.  Wee LM324 datashneet page 4.
7 mV is about 20% of your maximum brightness setting so at the divider ratio shown the opamp swamps fine differences from other sources.
An LM324 or LM358 is my opamp of choice in this application (as they are usually "good enough" and cost around 5 cents in modest manufacturing volume in China (or India)) but I'd usually not go below about 100 mV Vsense full scale with typical offset errors of under +/- 5% Vfullscale under typical temperature ranges.
If you want better than this you need some mix of higher Vsensemax or offset voltage trimming or a better opamp (of which there are many, but probably none more cost effective overall). You MIGHT be able to get better results with an untrimmed LM324 by making an instrumentation amp IF Voffsets tend to be matched within one package - which is possible, but I've never investigated. Trimming is easy and somewhat effective but in most cases use of a superior op-amp would be preferred. 

As you try to get much better than 5% accurate LED current then resistor tolerances start to matter if using eg 1% parts.
[1% worst case errors in R2, R3 give about +/- 2% errors. Rsense at 1% adds about another 1% overall. OA offset currents do not matter at these impedance levels.]