What are the values of the resistors you are using? With 23 LEDs and 3 D cells, you might be better off just running direct drive (no resistors). Just let the internal resistance of the D cells provide the current limiting. (I'm not sure if you can blow the LEDs if you change from alkaline D cells to NiMH or NiCd D cells though.) I upgraded my old Trek 7 and gave it 14 LEDs. It ran direct drive off 3 C alkaline cells with no problems.
Your LEDs are not uniform in brightness because LEDs, unlike incandescent bulbs are unable to equalise their power usage. While white LEDs have a nominal Vf of 3.6V, it actually varies a little from LED to LED. And a little variation in Vf results in quite a noticeable variation in current. And the current flowing through the LED is the component that determines the LED brightness. So even though you are applying the same voltage across all the LEDs, each LED will be drawing a slightly different current and so will vary in brightness.
There are 2 ways to solve this problem. The first, if you have a large supply of LEDs, is to match them. For this application, you can put them individually across a 4.5V supply and measure the current and so sort them accordingly.
The other method is to use an individual resistor for each LED. This works well only if you use the more precise resistors (1% type). The resistor becomes the main component in each branch to set the current for each LED.
There is a third way, but that involves using a voltage boosting circuit. You wire all the LEDs in series and put in a circuit to boost the voltage until it is sufficient to drive all the LEDs in series, in this case, 23 x 3.6V = 82.8V minimum. The LEDs will distribute the voltage among themselves, but the current running through each will be exactly the same, which results in the same brightness for all the LEDs.