I asked a similar question to the folks at Google about whether this was because I was using the stopover = true option in the waypoints and indeed it was. If you set it stopover to false, the duration in traffic should be returned.
There was small mention of this in the current documentation here
From Google:
... we can't predict how long you will stop at stopovers, making it difficult to give a proper estimation for the duration_in_traffic. By using non stopover waypoints you state that you wont stop at those waypoints, thus allowing our service to estimate the duration_in_traffic of every legs.
Also, they mentioned that if your using the Directions Matrix API, only origin/destination pairs count against your quota, so you can send multiple request without additional penalty.