Game Crash - Runnable thread OnlineAsyncTaskThreadSteam DefaultInstance crashed.

That looks roughly correct, however you should not store a pointer to Steam callback information; it has a very small lifetime and may not exist outside of the function call. You will need to make a copy of that struct and then copy that copy again into the ExecuteNextTick lamda.

Your example should look something like this:

 void FSteamworksCallbackAsync::OnSteamOverlayActive(GameOverlayActivated_t *CallbackData)
{
     check(CallbackData != nullptr);

     GameOverlayActivated_t DataCopy = *CallbackData;
     LiveSteamSubsystem->ExecuteNextTick([DataCopy, this]() {
         bool IsOverlayActive = (DataCopy.m_bActive != 0);
         if (MusicalRangeGameInstance != nullptr)
         {
             MusicalRangeGameInstance->OnSteamOverlayIsActive(IsOverlayActive);
         }
     });
 }

Or, even better, if you only care about that bool, it’s much more efficient to copy only that value, like this:

 void FSteamworksCallbackAsync::OnSteamOverlayActive(GameOverlayActivated_t *CallbackData)
{
     check(CallbackData != nullptr);

     const bool IsOverlayActive = (CallbackData->m_bActive != 0);
     LiveSteamSubsystem->ExecuteNextTick([IsOverlayActive, this]() {
         
         if (MusicalRangeGameInstance != nullptr)
         {
             MusicalRangeGameInstance->OnSteamOverlayIsActive(IsOverlayActive);
         }
     });
 }