Couple of things I see in your schematic.
The transistor in the photo is a BC517 not a BS517 as labeled in the schematic.
Also, the Darlington transistor is not wired up in the typical way.
You haven't labeled the pins but I'm assuming
- D13 goes to the base
- emitter goes to the pump
- collector goes to +12v
Typically the load goes on the other side of the transistor between voltage and the collector.
There is usually a current limiting resistor to limit the current flowing from the switching signal (D13 in this case) through the base and out the emitter to ground.
In this case you have no current limiting resistor but the motor should act as one but depending on the situation it still may allow too much current draw from D13.
Using D13 is not good to use as many bootloaders blink the LED in certain situations.
This would cause the the transistor to false switch on/off.
You could have ground bounce going on since there are ground wires running all over the PCB and there does not seem to be any sort of decoupling.
How stable does the ground signal going to the LCD module look? If measured on the LCD module relative to ground back at the Arduino module?
I have experienced this same behavior before on an LCD in something as simple as using both rails in a breadboard for ground signals with the ground to the Arduino connecting to one rail with a wire connecting one rail to the other and then using one rail for some of the logic and the other rail for the LCD and some of the other logic.
Cleaning up the ground signals and reducing the wires fixed the issue.
For the future, I'd recommend looking at using I2C for the LCD as it is fewer pins and easier to wire up.
An i2c backpack is less than $1 USD shipped to your door and if you use my hd44780 library, it is actually faster than using the extra pins and the IDE bundled LiquidCrystal library.
--- bill