Update:
If I use the default PlayerController, LogOut will be called normally.
If I use my custom PlayerController, LogOut won’t be called.
Then I checked and I saw in my BeginPlay method, I forgot to Super::BeginPlay.
After adding that, LogOut is called normally.
Hard to believe that one line missing result in the game play normally, except when players decide to quit.