I think your third option is correct
the interpreter is not working correctly for this particular currency.
and I have submitted this to Wolfram.
In general, it seems that the number separator is biased towards treating DecimalComma as a DecimalPoint, regardless of the currency (compare USD and EUR).
One would expect that JPY and VND get treated similarly as neither of those currencies have any decimal places

Code and other examples:
(* VND inconsistent*)
TextCases["$1.000.000","CurrencyAmount"->"Interpretation"]
TextCases["€1.000.000","CurrencyAmount"->"Interpretation"]
TextCases["¥1.000.000","CurrencyAmount"->"Interpretation"]
TextCases["₫1.000.000","CurrencyAmount"->"Interpretation"]
(* VND inconsistent*)
TextCases["$1,000,000","CurrencyAmount"->"Interpretation"]
TextCases["€1,000,000","CurrencyAmount"->"Interpretation"]
TextCases["¥1,000,000","CurrencyAmount"->"Interpretation"]
TextCases["₫1,000,000","CurrencyAmount"->"Interpretation"]
(* number separator is biased towards treating DecimalComma as a DecimalPoint *)
TextCases["$29,99","CurrencyAmount"->"Interpretation"]
TextCases["€29,99","CurrencyAmount"->"Interpretation"]
TextCases["¥29,99","CurrencyAmount"->"Interpretation"]
TextCases["₫29,99","CurrencyAmount"->"Interpretation"]
TextCases["$29.99","CurrencyAmount"->"Interpretation"]
TextCases["€29.99","CurrencyAmount"->"Interpretation"]
TextCases["¥29.99","CurrencyAmount"->"Interpretation"]
TextCases["₫29.99","CurrencyAmount"->"Interpretation"]
TextCases["$29,999","CurrencyAmount"->"Interpretation"]
TextCases["€29,999","CurrencyAmount"->"Interpretation"]
TextCases["¥29,999","CurrencyAmount"->"Interpretation"]
TextCases["₫29,999","CurrencyAmount"->"Interpretation"]
TextCases["$29.999","CurrencyAmount"->"Interpretation"]
TextCases["€29.999","CurrencyAmount"->"Interpretation"]
TextCases["¥29.999","CurrencyAmount"->"Interpretation"]
TextCases["₫29.999","CurrencyAmount"->"Interpretation"]
TextCases["$1.000","CurrencyAmount"->"Interpretation"]
TextCases["€1.000","CurrencyAmount"->"Interpretation"]
TextCases["¥1.000","CurrencyAmount"->"Interpretation"]
TextCases["₫1.000","CurrencyAmount"->"Interpretation"]
TextCases["$1,000","CurrencyAmount"->"Interpretation"]
TextCases["€1,000","CurrencyAmount"->"Interpretation"]
TextCases["¥1,000","CurrencyAmount"->"Interpretation"]
TextCases["₫1,000","CurrencyAmount"->"Interpretation"]
$Version (*"13.1.0 for Microsoft Windows (64-bit) (June 16, 2022)"*)
$Language (* English*)
Edit: Wolfram have confirmed it is a bug, case number :4973722