Self heating is definitely a factor. If you read the yaw rate output voltage right after cold boot, and then read after it has been on for a few minutes, I guarantee you will see a difference. If you calibrate the gyro (which in WPIlib usually means calling the constructor for the gyro) as soon as the robot boots, but it takes ~5-10 minutes before the match begins, your gyro will be drifting quite a bit by the time you need it.
One way to deal with the effects of self heating would be to use the temperature input and derive a model that takes into account the effects of temperature on the yaw rate output.
A far simpler way is to re-calibrate your gyro as close to the match start time as possible (this is easy to do if you make a couple of modifications to the WPIlib Gyro class - make the initGyro() method public and call it via button press from the Driver Station when you are in the Disabled state).