If you use the following circuit, the forward voltage of your LED will not matter -- you can actually swap in different LEDs and the constant-current circuit adjusts for it. The circuit also adjusts for changes in input voltage, so, as you'll see in the graph, the voltage is plotted from zero to 7 volts. This picture is of a white LED, which has a forward voltage of about 3.2 volts (which you can sort of see by where the voltage comes up).
Now, for this alternative run, I tried to approximate your circuit a bit more closely, by using three 1N4148 diodes in series, which has a total forward voltage of approximately 2.2 volts, which you said is what your LED presents. You can see that the circuit is exactly the same, and yet the LED current is still 20mA, even though the forward voltage is different. And this graph once again sweeps over the entire voltage range. You can see that, because of the lower forward voltage of your particular LED, that the current comes up at a lower voltage than with the white LED.
I have also done temperature variability runs on LTSpice with this, and the performance seems to be pretty good. The following graph of the temperature performance of the circuit is from -55 degrees Celsius to 125 degrees Celsius, in 10 degree steps.
I have been told that there are problems with this circuit, but I have made multiple prototypes and they have worked fairly well, yet I still consider myself to be a beginner, so I may not know what I'm talking about. Yet I have not seen this circuit elsewhere.
There are a few problems that I suspect. The first is oscillation. Because I'm using a circuit that has a much higher gain, it's basically a very strong amplifier, and that gives the opportunity for just a little bit of stray capacitance to ruin my day.
The second problem I suspect has the same cause as the first -- the high amplification. I believe, because of the high amplification, this circuit may be more susceptible to EMI, such as the ever-present 60Hz/50Hz line hum, but it could be anything. And I may not know until I've got a certain number in the field. So I should start small, and ramp up production lots slowly. Like 100, then 1,000, then ten-thousand.
The third problem that I suspect, is Beta variability, that transistors are known to have a large and wide bell curve of Beta values, and that means that unless the circuit automatically calibrates itself, or I get all my transistors from a source that's already been semi-binned (like I think a BC327-25 is?) And I'm sure it would help to have all of the transistors come from the same reel. Honestly, I don't know how bad this is because I don't know the variance of the Beta. The implication of this is that the constant-current value will be different for each circuit that is produced. I just don't know how much.
Do we put in a potentiometer at R9, find the value, then solder-in the right-valued resistor? Do I put a trim-pot in? An Arduino and a digi-pot? (Now that's overkill!) I don't know.
Hopefully, some of the true Electrical Engineers can verify where I'm right, and tweak/add/correct elsewhere.
Why do I like this circuit? I like this because I can separate that constant current part from PNP1, the "power" transistor, that drops all of the current, and that helps the circuit behave, and hopefully last longer. I like that I can switch out PNP1 with a bigger cheapo transistor, like a TO-220, which I can easily heat-sink or screw to the enclosure.
As your circuit stands, PNP1 gives off 60mW of heat at v1=5V, and 100mW at v1=7V. If you think this answer is the one, please accept it. If not, but you think it helped, (or I tried real hard), please hit the up-arrow and give me some credit. We work hard for the money! ;-)