Thanks ArenMook, you're right, upon further investigation I realised that this is indeed an obvious issue with the fact that properties don't get exposed in the editor (I was seeing MFillAmount, thinking it was the public property, whereas it is indeed the private one which has just been tagged as Serializable and therefore appears in the Inspector)
So yeah, since I am effectively setting the private member directly, the setter doesn't get called when I am playing the animation, so the geometry doesn't get dirtied so then the animation doesn't appear to be updating.
Whilst investigating I actually stumbled on a workaround whilst investigating which is, if I set keyframes for MColor to run alongside the MFillAmount animation (even if it's something as subtle as keying alpha from 0.99 to 1), then the animation updates properly (presumably Color changes force a full update?)
So I am now trying to decide whether I should go for that or for your approach (which I am a bit hesitant about as I am not too keen on peppering everything with this dummy component just to facilitate animation of a property). Both approaches feel a bit hacky anyway (not sure it's any better to have redundant alpha keyframes). Ideally Unity would just expose public properties in the editor! How cool would that be?