to move the message you will either need to create a new message (using the original message id) or edit the original message updating the "_control_points" field with the new position to move to. Here is a sample (untested) that should work:
// sample creating a new message:
Message msg = new Message();
msg.Id = OriginalMessageID;
msg.Add("_type", "position_report");
msg.Add("_action", "update");
msg.Add("_control_points", X + "," + Y);
msg.Add("_wkid", "3857");
msg.Add("sic", symbolID);
_messageLayer.ProcessMessage(msg);
// sample editing the original message:
Message originalMsg = _messageLayer.GetMessage(msg.Id);
originalMsg["_action"] = "update";
originalMsg["_control_points"] = X + "," + Y;
_messageLayer.ProcessMessage(originalMsg);
to edit the geometry, I assume there is a symbol xaml file located somewhere that you can override the template. Perhaps someone else can answer that part of your question.