m_DrownEnginePos is declared static, but it is assigned per instance from each model's memory point. Every vehicle that spawns overwrites the shared value, so all vehicles use the drown point of the last vehicle created. If that model has no drown_engine point, ConvertMemPointToPosition() returns vector.Zero (the model origin, roughly at ground level). From then on, any car standing in shallow water starts losing engine health. The result depends on spawn order, so it looks random between restarts.
Affected code:
4_World/Entities/Vehicles/CarScript.c: static vector m_DrownEnginePos;, assigned in InitializeParticles() (in 1.29, assigned in the constructor)
4_World/Entities/Vehicles/MotorbikeScript.c (1.30): protected static vector m_DrownEnginePos;, assigned in InitializeParticles()
Consumers: GetEnginePosWS(), used by the drown check in OnUpdate() (350 HP/s to Engine after 0.5 s), by motorbike crew ejection, and by the destroyed-engine smoke effect condition