The first thing that needs to check is the battery. This problem can be due to a battery that's near the end of its life. Battery performance decreases as the temperature decreases. Therefore it may be harder to start the car if it is cold outside.
The BMW may not start in cold weather for several other reasons. Especially if the engine is turning over without a problem, the battery is charged, but the engine refuses to start.
Faulty Spark Plugs or Coils
Spark plugs that were never replaced can prevent the BMW from starting in cold weather.
The BMW may not start if there is low fuel pressure, a bad fuel pump relay, or a faulty fuel pump.
A bad fuel pump can also cause this problem. If you have a fuel pressure gauge, you can quickly check the fuel pressure in the morning.
Another test you can perform is to cycle the ignition three or four times without cranking the engine. This should build up the required pressure to start the car.
The fuel pump relay may stick when the outside temperature drops drastically. To verify this, remove the fuel pump relay. Take it inside and warm it to room temperature. Do not use methods that would melt the relay. Reinstall it while it is still cold outside and start the engine.
If the engine starts, when the relay is warmed, replace the relay.
The variable intake valve control system may be the reason why your BMW won't start. VANOS adjusts the valves during engine warm-up for the best fuel/air mixture ratio. VANOS is designed to adjust valves at high RPM but can also impact the cold-weather performance.
Engine temperature sensor / PCM Coolant Sensor
The engine coolant temperature sensor may also malfunction, making it harder for your BMW to start in the morning. Read the fault codes from the Engine Control Unit (DME). If you have fault codes related to the engine temperature sensor, replace them.