本体のバージョンと異なるバージョンの日本語UIをロードしてしまうと問題が起きるので、ロードするときにバージョン番号をチェックして異なる場合にはロードしないようにしました。
ファイルバージョンを取得するにはGetFileVersionInfoなどを使うのですが、すでにロードしているDLLのバージョンを取得するのにパスを指定してロードさせるのは馬鹿げています。というわけで、バージョンリソースを直接読み込んで取得してみました。
std::pair<DWORD, DWORD> getVersion(HINSTANCE hInst)
{
  std::pair<DWORD, DWORD> version(0, 0);
  HRSRC hrsrc = ::FindResource(hInst, MAKEINTRESOURCE(VS_VERSION_INFO), RT_VERSION);
  if (hrsrc) {
    HGLOBAL hres = ::LoadResource(hInst, hrsrc);
    if (hres) {
      unsigned char* p = static_cast<unsigned char*>(::LockResource(hres));
      DWORD dwSize = ::SizeofResource(hInst, hrsrc);
      std::vector<unsigned char> buf(p, p + dwSize);
      VS_FIXEDFILEINFO* pInfo = 0;
      UINT nInfoSize = 0;
      if (::VerQueryValue(&buf[0], _T("\\"), reinterpret_cast<void**>(&pInfo), &nInfoSize)) {
        version.first = pInfo->dwFileVersionMS;
        version.second = pInfo->dwFileVersionLS;
      }
    }
  }
  return version;
}
LockResourceで得られたバッファへのポインタを直接VerQueryValueに渡すとアクセス違反が発生するのでバッファのコピーを作成する必要があります。
ちなみに、Windows CEではバージョン関係のAPIは3.0から実装されているはずですが、3.0ベースのPocket PC 2000では使えません。