I’m not racing in B but then again B, C and D are all the same, while A is an entirely different beast. I think Mike leaves an important clue above here.
Like he says, most of those above you in the results list have at least a sliver of green in their NP, meaning they have higher variability in their power output. Like you say, meaning they can. Whereas you - I’m guessing here - are more in an all-out effort and not able to match them in e.g. small climbs since, like you say, you have little to spare. They on the other hand…
Plus you are already at a disadvantage being on the lighter side among the top 12, since you need to push higher W/kg to stick with the heavies on flattish roads. And being light alone doesn’t benefit you as much as one might think even in a climb.
The next thing you should look at now is the other riders’ race profiles on the Zwift website, quickly accessed through the little green bar diagram symbols on the far left on the ZP race report. (ZP is down right now or I’d look myself.)
Take a look at their HR distribution diagrams. Are they different from yours? Do they have more time spent in Zone 3 or lower Zone 4 than you? If so, then there is your explanation to the disappointing result. If they are not working as hard as you, no wonder they have juice to spare at critical moments. And so you get dropped.
I point out two important things above:
At some point you as a lighter rider will have to go over W/kg cat limits to stay with a heavier guy who is on the limit. (Sums up the entire race, doesn’t it?) So as a lighter rider you are basically already screwed. You can’t really both win and stay in cat (unless you race in A). The race favors a heavier rider, given equal W/kg capabilities. Any race does, except the rare race including a very long climb. Granted, at some point weight turns into overweight and body fat doesn’t help you race. But there is a sweetspot in cat B-D. And whatever it is, it’s higher than your 67 kg for sure. Is this cycling physics? No, it’s Zwift race rules and just that. See below.
Given that you both respect W/kg cat limits but barely so, you will always be at a disadvantage against someone who is making less effort than you. Yes, that’s correct! Zwift actually favors cruising a race.
Sandbagging is not the most common form of cheating in Zwift. Cruising is. It’s just not as visible, unless you start digging in data on Zwift and ZP. How you win a race in cat B-D in Zwift and ZP is you get fitter so as to outgrow your cat but still stick around. You never pull, always draft. You always monitor your avg. W/kg as to not go over limits although you can. You leave a little room to spare in that average. And then in climbs or similar you bring down the hammer briefly. If you don’t do this, then someone else will. In basically any and every race. You need to get really lucky to sign up to a race with no cruisers in it.
Cruising as a form of cheating is real. Then on top of that there is a huge grey area where people aren’t exactly (or consciously) cheating but their levels of effort still differ significantly in a race. And who is to say how much you are supposed to suffer in a race? Shouldn’t you be allowed to race any way you like, it’s your body after all? And the answer is yes of course. But then also, should someone who doesn’t want to go too hard have the upper hand in a race? I don’t know. Occasionally maybe? But in every race?! Because that is what we have, a race system that will always favor riders who don’t want to go too hard. Zwift Velominati rule #1: STFU - Soften The F… Up, kinda.
It all boils down to the W/kg system in Zwift, as promoted by ZP, being utterly inappropriate as a race categorization. And there is nothing like it in any RL sport. It is unique and uniquely inappropriate. We can never get away from Watts and kg because both are needed for accurate and fair simulations on a smart trainer in cat A. But they won’t do as a way to split up riders into categories to make racing interesting for all.
What is needed is instead a race categorization based on past results, just like in US cycling, World Cup skiing etc etc, a proven concept. It works. And it would work for Zwift too and make racing more intuitive and interesting.
You enter a race and don’t feel like going too hard, you just wanted to participate for fun and fitness. Ok fine, but you don’t win. Agreed? Fair deal?
You enter another race and don’t feel like going too hard (except at crucial moments like small climbs) and it turns out you still outperform the other riders because they are weaker even though they go flat out. Ok fine, you win this time. Kudos to you for being so strong!
You enter yet another race and don’t feel like going too hard, and it turns out you still outperform the other riders. Not fine. Because now you have already been on the podium in many races in your category and it’s time you get moved up to the next category where you obviously and rightfully belong. And a results-based categorization does exactly that. It’s self-sanitizing.
You can’t put upper limits on people’s efforts in a single competition or race. (You have to do that between races.) “Go hard! But not too hard!” It goes against reason and the nature of sports. Time for a change.