I totally understand the confusion. It’s a bit of an obscure system. If you search for GetDefaultPawnClassForController_Implementation inside SGameMode.cpp you’ll find how it figures out which BotClass to use for the AI controller.
That function is called internally by the game framework when you call RestartPlayer(Controller)