diff --git a/synapse/handlers/room_member.py b/synapse/handlers/room_member.py
index 970fec06669d2e693949c1f7b153840265cd0e94..7e6467cd1d1531847a040d17c79435e26955e617 100644
--- a/synapse/handlers/room_member.py
+++ b/synapse/handlers/room_member.py
@@ -189,6 +189,10 @@ class RoomMemberHandler(BaseHandler):
         content_specified = bool(content)
         if content is None:
             content = {}
+        else:
+            # We do a copy here as we potentially change some keys
+            # later on.
+            content = dict(content)
 
         effective_membership_state = action
         if action in ["kick", "unban"]: