I've been battling the horizon tilt issue for months hoping for an update that will address it. It hasn't. What I can tell you is that there are multiple sensors that are working together to attempt to figure out what "down" actually is using complicated algorithms. The sensors are not flawed, it's the algorithms could use some work though. What I have noticed is that the atttitude of the Mavic has a bearing on what numbers are plugged into the algorithms. Also, the longer the attitude is in a certain position, the bigger the bias in the numbers that the algorithm uses.
In plain terms, say you were in sport mode and going full throttle forwards for awhile. The aircraft is pitched forward and slowly the "down" the aircraft senses migrates to a different angle corresponding to the forward pitch of the aircraft.
You don't notice this change in the sensed angle until you turn the aircraft 90° left or right, in which case you will see the horizon is pitched clockwise or counterclockwise depending on which way you turned. You'll also notice that if you turn the aircraft back toward the way you were traveling that screwed up the angle, the horizon is level. You'll also notice that if you spin 180° from there that the horizon is still level, but it's lower.
The same also happens if your Mavic is fighting against a side wind to stay in posistion. A wind from the left will cause the aircraft to have to roll left to maintain it's posistion. Stay there long enough and the sensors will slowly start to think "down" is a slightly different angle. Now your horizon will be off based on the direction of the wind that day.
It's crazy to think that something as simple as a plumbob would instantly be able to tell which direction was down and correct this issue, but unfortunately there's no space for one of those in a drone so it relies on microscopic gyroscopes and magnetometers to do that job, and those have inherent flaws. They rely on, first and foremost, having a good calibration on startup, meaning make sure you power up on a horizontal surface. From there then on, they are literally just measuring changes in the aircraft's position and doing their best to make sure everything is back to zero when the aircraft is level.
So, now that you know what causes them to get screwed up, you should know what to do to correct it while in flight. The manual roll adjustment is terrible, unreliable, and should be avoided at all costs(leave it at zero). First, I recommend not doing any quick and hard maneuvers that will skew your algorithms almost instantly. Keep it slow and steady. Second, once you start to see how the wind or long periods off single-direction flight start to skew the algorithms, you can actually counter it by doing the opposite. If you were facing one way and the wind was to the left for a minute, turn the craft around and let it fight the wind from the right for a minute. It will slowly fix itself. If it's not windy at all that day and a hard maneuver screwed up the horizon, just let the craft hover for a bit and it will slowly but surely level itself back out. A great tool to use is the horizon indicator option in the lower left hand corner where the map is. Choose the crosshair and it will bring up the flight bubble/power usage indicator. Watching that while you're flying will give you a good indicator as to how your horizon will be screwed up and will help you orient the aircraft afterwards to fix it. I hope this helps.