You are right in that they are not switching losses. If they were, the current would go up with frequency, not down.
You said it yourself. Your controller implements a dead time. At higher frequency the dead time is a larger fraction of the PWM period, so the effective time the motor is on is reduced.
Just to avoid some confusion, I want to point out that what you are seeing has nothing to do with the induction of the motor coils. The inductance of the coils only serves to smooth out the individual pulses. These decreases the ripple current in the coils and makes the current closer to the average. That's actually a good thing.
Depending on how exactly you are driving the motor, it is possible that too little inductance of the coils causes problems at low frequencies by causing back and forth current even though it averages to the desired amount. The losses in the coils are proportional to the square of the current which is higher with ripple imposed on the slow desired signal than just the average. Unless you have a unusual or badly designed setup (I have seen both), this is probably not the problem. Again, the dead time explains your symptoms very nicely.
Added:
I just realized that maybe by "PWM" you are talking about the motor phase drive frequency (how fast you are trying to rotate the magnetic field), not the PWM frequency used to modulate the effective drive voltage the motor sees. Your question is badly worded in that this major distinction is not clear. If in fact you are wondering why the motor takes less current when it is run faster, then that is because of the back EMF it generates. You can think of a motor as something that makes torque proportional to voltage with a variable voltage source in series. This voltage source apposes the voltage you apply proportional to how fast the motor is spinning in the direction you are trying to drive it in. The faster it goes, the less efective voltage is presented to the "driving" part of the motor, and it takes less current.
Motor/generators have a k1*V/f transfer function when coasting and when accelerating or braking have a force transfer function of k2*V/DCR.
Since motors are designed to do work they may be >90% efficient but carry a lot on stored energy from the inertial load which can be far greater than the Joules stored in the motor itself.
So the duty cycle of dumping Watts or plugging power with even more Watts, must be regulated with the winding thermal resistance Rwa ['C/W] in order to prevent overtemp on the windings and armature which causes accelerated aging.
Since a contant acceleration and braking force is often ideal at some level, how does one control this effectively and efficiently?
There's no simple solution but let me try this idea.
If one knows the DCR of the motor and uses efficient MOSFET switches that are <2% of the DCR then most of the heat I^2*DCR (neglecting other losses) will be in the motor windings.
We know that for PWM that the effective series resistance (ESR) is a ratio between RdsOn (of bridge pair) divided by the duty cycle. But the back EMF V/f reduces with RPM so the effective braking current reduces in an uncontrolled decay in rotational g's.
There when you input PID loop parameters for some machine with certain transfer functions and mass and choose setpoints for acceleration and velocity profiles it is better to compare the error in each parameter separately for a nice 2nd order stable response with critical dampening. That means choose a start or stop time according to current conditions including winding temp, start conditions and end conditions and compare acceleration feedback with current feedback and rotary encoder rate of changes and velocity feedback with encoder frequency and then set an g level that can be maintained to complete the task in the desired time as often as needed without overheating.
Now there are a lot of variables to compute here, which I won't begin to define.
here comes the Carl Jung moment (aha)
The way to set controlled braking profiles is now obvious to some to use current sensing with average current compared to target current profile in a servo loop using PWM to the required negative plug voltage using a 50mV current shunt rated at maximum short circuit currents. The PWM duty cycle can be varied perhaps from 10% to 100% to minimize the harmonics of the PWM rate and the thermal sensor can reduce the duty cycle as needed if there is a repetitive cycling of motors up and down.
Before locking the rotor with 0 OHm bridge shunts across all coils (no current) we need to modify the PID loop to go from constant velocity mode to braking mode to locked position mode using just before the 0 velocity error reaches 0 so that we don't start going backwards from the plugged negative voltage. But then as the OP stated doing this from a low velocity is a bit of overkill with dynamic losses increased and the software guy's not getting it right. But by regulating the current shunt drop, this servo control method ought to give a smooth transition using predicted PWM levels from "-Vr plug voltage and 0V by knowing the desired barking rate and expected current with inertial load. Some adaptive braking cycles may need to be periodically done to check the transfer functions are correct, to compare expected stop times with actual.
so what is the aha? Servo design with vel, accel, inertial mass , low RdsOn/DCR ratios with RPM feedback and current loop regulation for smooth stops. (something really need for bus drivers) Then compensating loop gain for variable inertia and load current using RPM feedback to track user foot controlled brake g levels.
The tradeoff is you can't have shortest stop time with variable back MF V/RPM or an uncontrolled resistance, you need a back driving voltage that increases as speed reduces to keep current constant. OR you must compromise on shortest stop time with a fixed back-driving voltage and controlled braking current.
S&H can be used on peak currents and compared with avg currents to get cycle to cycle PWM feedback on duty cycle.
This is how we did it in the 70's with a 2Hp linear motor seeking to any track in 50 ms with a large mass head arm assembly on 14" HDD's with zero overshoot on 5 disks to within 0.1 thou position error using embedded servo pulses. ...those were elephants.
Best Answer
Advancing timing is a practice common to electric motors and internal combustion engines. The purpose is to increase efficiency. In other words to maximize the power out for a given power in.
In electric motors, the amount of torque produced in relation to the rotor field vector with respect to the stator field vector is given by:
\$\tau = \tau_{max}~sin~\theta\$
Where:
\$\theta =~\$Angle between the two field vectors
When \$\theta = 0°,~\tau = 0\$ (no torque means no movement) and when \$\theta = 90°,~\tau=\tau_{max}\$. For all other angles between 0° and 90°, \$\tau\$ is some percentage of \$\tau_{max}\$.
The problem here is that as the rotor spins, the interaction between it's magnetic field and the stator's cause the fields to distort and move from their normal non-rotating positions. The faster it spins, the more the fields distort. The best picture I could find of this phenomenon actually comes from the Wikipedia article on brushed DC motors. The the principle is the same for brushless:
By advancing the timing, you are ensuring that commutation occurs when the two fields are at 90° to one another in order to maximize torque production at maximum speed. However, since the position of the fields will change with speed, this timing advance is only good for one particular speed in one particular direction. For all other speeds your efficiency will be less than optimal at the angle between the two fields decreases from 90°. And for the reverse direction, you will be much less than optimal requiring much more current to produce the same amount of torque.
Depending on your requirements, a 0° timing advance may not be such a bad thing. If you need to be able to reverse direction, but don't care as much about power consumption, maximum speed, or maximum torque, then a 0° timing advance may be a good compromise. However, if you need to produce maximum torque at maximum speed without drawing excessive current. Then advanced timing is a must.
A note on what causes the distortion
The distortion occurs because of the laws discovered by our friends Lenz and Faraday. In a simple motor, you have a coil rotating in a magnetic field:
As current passes through the coil, it causes a generated magnetic field around the wire. As the generated magnetic field interacts with the static magnetic field, their forces push on one another and the fields distort:
As the coil rotates, it moves in and out of the magnetic field. When the wire is in the magnetic field, the field distorts. When the wire is out, the field snaps back to normal. This snapping back take some amount of time. As the coil rotates faster and faster, the field has less time to snap back to normal. So the faster the motor turns, the more distorted the field remains.
Somewhat related
I sometimes find that people have an easier time understanding internal combustion engines as opposed to electric motors. Maybe it's because people have a better understanding of explosions versus rotating magnetic fields. Or perhaps because gasoline cars are still so much more common. If you're one of those people, have a look at this How Stuff Works article. It explains the reasons behind advancing the timing in an internal combustion engine. There are a lot of similarities between the two and the analogy may be helpful to your understanding.