Well groovy pants to me! I solved it. In a way. Basically I had some of my matrices in the wrong shape. So I had to work that out and then my multiplier worked. It should be noted that a basic * multiplier in Numpy is not the same as the one in MATLAB.
In Numpy you have to use the dot method.
dstack = np.vstack(np.concatenate((d, np.array(1, ndmin=1)))) # MATLAB equiv: [d;1]
cmult = C.dot(dstack)
cref = np.array(C[:,0], ndmin=2).T
C = np.concatenate((cmult, cref), axis=1)
This is how I arrived at the expected figures. I could lose the two lines in the middle and I could probably simplify the dstack variable, but essentially it's working. I went snowblind last night on this, but managed to figure it out in a short time this morning.