I think I found what to change for gaussian splats to work, but I can’t explain it … 
First, as suspected, the path for the red pixels never seems to be taken in write_bayer2(). If I initialize rgb and the weights in fix.comp/main() like
vec3 rgb = vec3(0.1234, 0.0, 0.0);
vec3 w = vec3(1.0, 0.0, 0.0);
those values make it to the final image output, i.e.
imageStore(img_out, ipos, vec4(rgb, 1.0));
produces
0.123352 0.0178528 0.0114746 1
0.123352 0.0179901 0.0111618 1
0.123352 0.0176697 0.0105896 1
… for subsequent pixels (csv export).
Or
vec3 rgb = vec3(0.5, 0.0, 0.0);
results in
0.5 0.0178528 0.0114746 1
0.5 0.0179901 0.0111618 1
0.5 0.0176697 0.0105896 1
for the same pixels.
Now I also output ipos.x and ipos.y, with following result for that (arbitrary) crop:
2448 1052 0 1
2450 1052 0 1
2450 1052 0 1
2452 1052 0 1
2452 1052 0 1
2454 1052 0 1
2454 1052 0 1
. . .
2576 1052 0 1
2576 1052 0 1
2578 1052 0 1
2578 1052 0 1
2580 1052 0 1
2448 1053 0 1
2450 1053 0 1
2450 1053 0 1
2452 1053 0 1
2452 1053 0 1
…
I.e. the x coordinate progresses by 2, the y coordinate by 1. Seems strange to me, but might be due to the rggb pattern (or the down-sampled gauss/cov input). Is this ok?
Anyway, per r=1 the parameter “o” to write_bayer2 should clearly also hit red pixels, due to o = ipos+ivec2(i, j) and i, j each taking on -1,0,1 - right?
So I was wondering, why the if(((o.x & 1) == 0) && ((o.y & 1) == 0)) condition should never be met, except … if the green path before always takes precedence and we never hit the … else if(red pixels)
Now the weird thing comes: if I remove the "else"s in the if-r/g/b splitting, the behavior should be unchanged to my understanding, as the if-clauses are mutually exclusive … but actually this activates the red path: gaussian splats now have the correct colors, identical to RCD!
Same if I keep the if-else logic, but just exchange the red and green blocks like
if (red pixels) { … }
else if (green pixels) { … }
else if (blue pixels) { … }
→ Gaussian Splats ok, colors identical to RCD.
Any ideas how this could be explained?