Wow! I think I found your problem. The good news is, your table updates are just fine! They just don't show properly in the subform.
I actually built a copy of your database from the info you provided (which was nice and complete, thank you!).
Here's what's happening. You enter the first player event and everything is fine. When you enter the team for the second player event, you requery the Choose Player combo box. That combo box's internal list now has only players from the second team. It no longer has players from the first team.
But you see, the Choose Player combo box for the first player event is the same combo box! It's repeated, but it's still the same control. So when you requeried it, you changed the list underneath the first player's combo box, too.
Well, now the value in the first player's combo box (the Player_ID is the value, because it's Control Source property is bound to Player_ID) is not in the combo box's list. When this happens, the combo box blanks out its text box part. The data underneath (and in the Player_History table) hasn't changed, but the combo box no longer knows what name to display.
This only happens when what you display in the combo box is something other than the bound column. I'm assuming you set the Column Widths property to 0 (or 0;0 etc., just so the first number is 0). This keeps the Player_ID from displaying, which is what you wanted. But what actually is displayed comes from the combo box's list. If you change the list, the text box part gets updated, and if the Player_ID value is no longer in the list, the text box will display blank.
Ok, so how do you fix it? Unfortunately, you can't make it do what you want, unless you leave all the players in the combo box list. This is just a result of showing multiple records at once, but only having one combo box control and hence only one list with which to translate Player_IDs to names.
I can think of one thing that would work, though. It's kind of tricky.
First, create a query with both your Player_History and Player_Info tables. Access should automatically join them on Player_ID fields; if it doesn't, create that join yourself. Drop the "*" from Player_History into the grid, and drop Last_Name from Player_Info into the grid. Save the query as Player_History_WNames.
Next, go to your subform. Change its RecordSource to Player_History_WNames. Then draw a text box on the form, delete its label if it has one, and set its properties as follows:
Control Source: Last_Name
Enabled: No
Locked: Yes
Back Style: Normal
Back Color: 16777215 (White)
Special Effect: Flat
Border Style: Transparent
Finally, move and resize the text box so that it exactly overlaps the text part of the Choose Player combo box.
Now you won't see what's actually in the combo box any more, you'll see the text box on top of it--and that contains the player name from the query.
Except: When the combo box has the focus, Access brings it to the top temporarily, which means the text box will be hidden. So, if you select a team, etc., then move to a row in the subform with a different team, then click the player combo's dropdown arrow, the combo's text part will go blank. But we can fix that, too.
The problem here is that the combo's list is out of sync with the current record. To make sure they always stay in sync, you need to requery the combo box whenever you change rows in the subform. Fortunately, Access fires a Current event whenever you do this. All you have to do is build an event procedure for On Current in the subform, and DoCmd.Requery "Player_ID1" in it.
I tried this all out, and it seems to work. Hope it works for you, too. Good luck. And hey, if it does, I wouldn't object to getting a vote for my effort (hint, hint ;-)). Rick Sprague