테스트를 해보면, 안드로이드의 기본 동작은 Dark Mode를 설정할 때 현재 액티비티가 다시 생성이 되고 BottomNavigationView가 마지막 프레그먼트의 상태를 기억해 복구를 해줍니다. Dark Mode 설정 후 홈 프레그먼트로 돌아간다는 거는 프레그먼트 스택을 잘못 사용하고 계실 수도 있다는 의미이니 이 부분은 확인을 해보시구요.
프레그먼트의 전환을 특이한 방법으로 하거나 한게 아니면, Fragment.OnBackStackChangedListener를 통해 프레그먼트가 바뀌는 걸 감지할 수 있고, BottomNavigationView는  menu를 설정해서 쓰므로 BottomNavigationView.getMenu()를 통해 메뉴를 가져와서 원하는 메뉴아이템을 찾을 수 있고 setChecked를 통해 현재 보이는 화면에 해당하는 메뉴로 선택이 가능합니다.
기본적인 코드를 아래처럼 될 것 같습니다.
getSupportFragmentManager().addOnBackStackChangedListener(new FragmentManager.OnBackStackChangedListener() {
            @Override
            public void onBackStackChanged() {
                Fragment currentFragment = getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment_activity_main);
                if (currentFragment != null) {
                    String tag = currentFragment.getTag();
                    if ("Home".equals(tag)) {
                        binding.navView.getMenu().findItem(R.id.navigation_home).setChecked(true);
                    }
                    if ("Dashboard".equals(tag)) {
                        binding.navView.getMenu().findItem(R.id.navigation_dashboard).setChecked(true);
                    }
                    if ("Notification".equals(tag)) {
                        binding.navView.getMenu().findItem(R.id.navigation_notifications).setChecked(true);
                    }
                }
            }
        });
 
코드는 일단 어떻게 되는지만 보여드리기 위해 정리되지 않은 상태입니다.
currentFragment.getTag는 FragmentManager를 통해 Fragment를 replace를 할 때 마지막에 전달하는 Tag값입니다.
public @NonNull FragmentTransaction replace(
    @IdRes int containerViewId,
    @NonNull Fragment fragment,
    @Nullable String tag
)