diff --git a/connector/src/main/java/org/geysermc/connector/entity/player/PlayerEntity.java b/connector/src/main/java/org/geysermc/connector/entity/player/PlayerEntity.java
index b43e020bc..85493660b 100644
--- a/connector/src/main/java/org/geysermc/connector/entity/player/PlayerEntity.java
+++ b/connector/src/main/java/org/geysermc/connector/entity/player/PlayerEntity.java
@@ -355,7 +355,9 @@ public class PlayerEntity extends LivingEntity {
                 session.sendUpstreamPacket(packet);
             }
         } else {
-            if (valid && metadata.remove(EntityData.SCORE_TAG) != null) {
+            // Always remove the score tag first, then check for valid.
+            // That way the score tag is removed if the player was spawned, then despawned, and is being respawned
+            if (metadata.remove(EntityData.SCORE_TAG) != null && valid) {
                 SetEntityDataPacket packet = new SetEntityDataPacket();
                 packet.setRuntimeEntityId(geyserId);
                 packet.getMetadata().put(EntityData.SCORE_TAG, "");
diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/scoreboard/JavaScoreboardObjectiveTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/scoreboard/JavaScoreboardObjectiveTranslator.java
index fec000420..30ef6568d 100644
--- a/connector/src/main/java/org/geysermc/connector/network/translators/java/scoreboard/JavaScoreboardObjectiveTranslator.java
+++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/scoreboard/JavaScoreboardObjectiveTranslator.java
@@ -70,11 +70,9 @@ public class JavaScoreboardObjectiveTranslator extends PacketTranslator<ServerSc
                 if (objective != null && objective == scoreboard.getObjectiveSlots().get(ScoreboardPosition.BELOW_NAME)) {
                     // Clear the score tag from all players
                     for (PlayerEntity entity : session.getEntityCache().getAllPlayerEntities()) {
-                        if (!entity.isValid()) {
-                            // Player hasn't spawned yet - don't bother
-                            continue;
-                        }
-
+                        // Other places we check for the entity being valid,
+                        // but we must set the below name text as null for all players
+                        // or else PlayerEntity#spawnEntity will find a null objective and not touch EntityData#SCORE_TAG
                         entity.setBelowNameText(session, null);
                     }
                 }