I’ve been having a somewhat similar issue.
I’ve got two Pi3b’s co-located so I can compare antennas or other changes made to one system while keeping the other as a reference.
The two were installed a few months apart, but both using SD image 3.1.0.
I can’t remember, but probably downloaded the image again for the second install.
The second Pi is behaving as you’d expect with the 3.3.0 upgrade (initiated from the Web control panel).
The first on the other hand goes through the motions and happily reports a successful upgrade until it restarts, then after a reboot, it reports 3.1.0 again.
It’s not a big deal, but interesting all the same.
For the sake of interest, I when 3.5.0 came out, I repeated the upgrade procedure (command on the Stats page). The Pi successfully updated and reported 3.5.0 on the Stats page as well as [local IP]:8080
As before, it reverted to 3.1.0 after a reboot (I took screen shots to prove my sanity).
At this point, I decided it was time to format the SDcard and load a fresh image (3.5.0)