That’s always going to depend on what you are comparing it to, and how it is being used.
There are two things you use to determine SOC. The one is purely amp-hour counting, which is subject to some drift (due to accuracy of reading, how often you get a reading, accumulating floating point errors, etc). The second is “waypoints”, voltages that are known to correspond to specific SOCs.
The BMV has exceptionally good Amp-hour counting, but it only has one waypoint: The “charged voltage”. This is when it resets to 100%.
Now a good BMS should be at least as accurate as the BMV in terms of Ah counting, and it should have more than one waypoint for correcting the SOC. To use an example of what I mean by waypoint: If your lowest cell measures below 3.2V (assuming LiFePO4), you are definitely below 50% SoC… not above it. So a good BMS can use such voltage readings – and it has readings of each cell, which the BMV doesn’t have – to correct the SOC estimate.
On top of that, the usage pattern makes a difference. If the built-in current sensor in your battery cannot accurately measure below 4A, for example, loads below 200W for extended periods of time go unnoticed. Your SOC estimate will tend to drift upward. There are actual well-known commercially-available batteries that have trouble measuring below 4A. I will not mention them, to protect the guilty.
With all that said: The bulk of the SOC-estimating work is done using Ah counting. The bit in the middle, between 30% SOC and 80% SOC, that sits in that flat part of the voltage curve, and that is done almost entirely with Ah counting because there isn’t much in the way of useful waypoints. If you recharge the battery to 100% daily, your BMV should be 100% accurate, as there is little time for drift, and it hits that 100% waypoint every day.
But if the battery lives in that space in the middle for days on end, you will always see a difference developing, and in theory the BMS can make adjustments with the additional waypoints that the BMV cannot.
So… what it comes down to is this: If the BMV appears more accurate than your BMS… you need a better BMS