Work with a value table for $f(x) = x^3 - 3x^2 + 2$ rather than pure algebra, it makes the true/false checks easier to see.
First locate where the slope is zero: $f'(x) = 3x^2 - 6x = 3x(x-2)$, zero at $x = 0$ and $x = 2$, both inside the domain $(-1, 3]$.
Build a small table of values around the interesting points:
| x | -1 (excluded) | -0.9 | -0.732 | 0 | 1 | 2 | 2.732 | 3 |
|---|---|---|---|---|---|---|---|---|
| f(x) | -2 (limit only) | -1.159 | 0 | 2 | 0 | -2 | 0 | 2 |
Reading the sign changes: $f$ crosses zero once between $-0.9$ and $0$ (at $x \approx -0.732$), again at $x=1$, and again at $x \approx 2.732$. Only the first crossing sits inside $[-0.9, 0]$, so there is exactly one root there, not two. Statement (A) is false.
The table also shows $f$ rising from $-1.159$ up to $f(0)=2$ (a local peak), falling back down to $f(2)=-2$ (a local trough), then climbing again to $f(3)=2$.
Since $x=-1$ is not part of the domain, the value $-2$ that $f$ would take there is never actually reached at that end. The only point where $f$ genuinely equals $-2$ in this domain is $x=2$. So statement (B), "minimum at 2 only", holds.
The peak value $2$ appears twice in the table though, once at $x=0$ and again at $x=3$, since $x=3$ is included in the domain. So the maximum is not exclusive to $x=0$, which makes statement (C) false.
The table confirms $f(1) = 0$ directly, so statement (D) is true.
So the correct statements are (B) and (D).
\[ \boxed{\text{(B) and (D)}} \]