diff --git a/src/Query/Builder.php b/src/Query/Builder.php
index f613b6467..5c873380b 100644
--- a/src/Query/Builder.php
+++ b/src/Query/Builder.php
@@ -783,13 +783,6 @@ public function update(array $values, array $options = [])
             unset($values[$key]);
         }
 
-        // Since "id" is an alias for "_id", we prevent updating it
-        foreach ($values as $fields) {
-            if (array_key_exists('id', $fields)) {
-                throw new InvalidArgumentException('Cannot update "id" field.');
-            }
-        }
-
         return $this->performUpdate($values, $options);
     }
 
diff --git a/tests/Ticket/GH3326Test.php b/tests/Ticket/GH3326Test.php
new file mode 100644
index 000000000..d3f339acc
--- /dev/null
+++ b/tests/Ticket/GH3326Test.php
@@ -0,0 +1,42 @@
+<?php
+
+declare(strict_types=1);
+
+namespace MongoDB\Laravel\Tests\Ticket;
+
+use MongoDB\Laravel\Eloquent\Model;
+use MongoDB\Laravel\Tests\TestCase;
+
+/**
+ * @see https://github.com/mongodb/laravel-mongodb/issues/3326
+ * @see https://jira.mongodb.org/browse/PHPORM-309
+ */
+class GH3326Test extends TestCase
+{
+    public function testCreatedEventCanSafelyCallSave(): void
+    {
+        $model = new GH3326Model();
+        $model->foo = 'bar';
+        $model->save();
+
+        $fresh = $model->fresh();
+
+        $this->assertEquals('bar', $fresh->foo);
+        $this->assertEquals('written-in-created', $fresh->extra);
+    }
+}
+
+class GH3326Model extends Model
+{
+    protected $connection = 'mongodb';
+    protected $collection = 'test_gh3326';
+    protected $guarded = [];
+
+    protected static function booted(): void
+    {
+        static::created(function ($model) {
+            $model->extra = 'written-in-created';
+            $model->saveQuietly();
+        });
+    }
+}