The HKG-JNB flights can have people checking in REALLY early due to connections from other destinations. I've only seen a similar issue when SAA had cancelled or delayed flights from HKG, SAA would normally transfer revenue F pax's to CX. However to do this to the point that your were downgraded seems odd. I would have checked in earlier in the due to this fact.
Have you written to CX to ask for a proper explanation of what more you could have done to ensure you wouldn't have lost the F seats? This may put them on the line to explain how F was actually full (which it normally isn't on CX)