I think the next step is to add say 50uS to the delay between applying vcc and 12v.
If I get time later today I'll try it:

void vcc_on() {
// Enter High-voltage Serial programming mode
digitalWrite(VCC, HIGH); // Apply VCC to start programming process
delayMicroseconds(20); // TRY 50-70uS HERE ???
digitalWrite(RST, LOW); //Turn on 12v
delayMicroseconds(10);
pinMode(DATAIN, INPUT); //Release DATAIN
delayMicroseconds(300);
}
Another version (there are many, all very similar) suggests that an active 12v via a PNP to pos is more reliable than the current 1k pullup to 12v, I will try that too, though that will take a bit longer.
I've since checked out several of these very similar fuse-blower projects, and they all mention weirdness and fuse miss-reads!
EDIT:
Eureka!!!
Thats it chaps. By allowing a bit more 'setting time' before turning on the 12v programming voltage,
all my 'suspect' DigiSparks program perfectly. That includes the 'bink_p5' ones and a couple of '2+1 encoder' ones. I will upload the amended sketch to post #1.
EDIT: Yep that appears to be it. I have 22 DigiSparks here on my bench, some new ones that I've just unpacked, some I've loaded with either 'blink_p5' or the 2+1 encoder, and some with random project sketches on them.
ALL now behave perfectly. The P5 switch to enable the elevon mixer on the 2+1 works fine. They all load blinky ok, and after setting P5 to I/O they all blink P5 ok. After setting P5 back to 'reset' they all reprogram ok.
I'm quite relieved after everyone had hoped to join in the fun and had no success. Please try the amended sketch & let us know how it goes, I hope you'll find its fine now
Not sure if I made the operation clear - it reads the fuses, waits 10 seconds, writes 'P5=reset', waits 10 seconds, writes 'P5=I/O' then halts. Just unplug when the DigiSpark is showing the fuse-state you need.
Cheers
Phil