Since the load is essentially a short, the MOSFETs must switch fast to spend as little time as possible in the region between ON and OFF where RdsON is high.
Using the manufacturer's spice model, driven with 12V and a 30R gate resistor, I get about 1µs before gate voltage reaches 10V, and a total switching dissipation energy of 95µJ per MOSFET which is fine, switching time is not the problem.
However on the pictures I see rather long wires, and the MOSFET driver is powered directly from 12V with no visible decoupling capacitor.
Hypothesis 1: would be that as the MOSFETs turn on, battery voltage will drop due to the huge current. This will also drop the supply voltage of the MOSFET driver, and therefore the MOSFET gate voltage, perhaps to a point the gate voltage becomes too low to get the low RdsON you need.
Hypothesis 2: the gate driver bringing down its local VCC when switching due to lack of decoupling capacitor and long wires. Perhaps it could oscillate.
Hypothesis 3: MOSFETs oscillation due to long gate wire inductance.
Hypothesis 4: some of the SMD resistors have cracked and only a few are still functional, leaving too few MOSFETs ON, so they take too much current and burn.
All have the same fix: remove the gate resistor assembly and put a bit of perfboard below the MOSFETs, then solder SMD gate resistors on this board. This will prevent them from cracking. Put the driver on the same board, with short wires to gates and source bar.
Add local decoupling capacitance, and a diode to prevent voltage drop on the battery to bring down the driver's local supply.
You need enough capacitance to power the driver while the battery voltage drops, so at least a few hundred µF. It needs very low ESR to deliver the large gate current spike which should be around 4A. Total gate capacitance should be on the order of 100nF, so the decoupling cap should be much larger than that to avoid voltage drop. I'd use perhaps 2-3x 10µF 25V X7R SMD MLCCs for the initial high current spike, plus whatever electrolytic you have lying around to keep the driver powered (140µA) after switching, maybe a few hundred µF. Then a resistor to limit charging current.
If my hypothesis is correct this should work. In case it doesn't, before welding, you can put scope probes, one channel on the battery voltage and one channel on the MOSFET gates. Ground on the MOSFET source bar. Trigger on gate voltage, say 1V rising, record for the length of the pulse. Test the scope setup without actual welding. Then do a weld. If you see the battery voltage drop significantly but the added capacitors keep the gate voltage to a healthy 11V and nothing blows then it's fixed. If you see oscillations, then it needs more work.
A big freewheeling diode could perhaps help. I'm not really worried about the MOSFETs, they will avalanche, but the voltage spike at turn-off could harm the driver.
For switching, MOSFETs care about Vgs, so the driver ground should be connected to the source of the FETs. Since you use one driver, IMO the best spot would be in the center of the row of FETs to get shortest gate wires, then connect its ground to the source bar at this point. Voltage drop along the bar should be minimal anyway
The MOSFET driver only cares about voltage between its input pin and its ground pin. So ESP32 ground should be wired to driver ground (not battery ground). Otherwise voltage between these two grounds can cause false triggering. Wires should be short and twisted to minimize induction from the high current loop. The worst case would be a negative spike on driver input when the high current turns on, which would turn the driver off, then repeat, oscillate, and MOSFETs blow.
Basically the bottom schematic (star grounding) puts the voltage across the impedance of the ground busbar and connections in series with the FET source, so the driver is not referenced to the FET source, which can create problems (oscillations, etc). Driver ground should go to FET source as per top schematic. ESP32 ground should go to driver ground too, otherwise the reference voltage of the input signal will change during switching.