The main confusion lies in the difference between "size" and "value".
"Polynomial Time" implies polynomial w.r.t the size of input.
"Pseudopolynomial Time" implies polynomial w.r.t the value of the input. It can be shown (below) that this is equivalent to being exponential w.r.t the size of the input.
In other words: Let $N_{size}$ represent the size of the input and $N_{val}$ represent the value of the input.
Polynomial Time: $O(N_{size}^x)$ for $x\in\mathbb{N}$
Pseudopoly. Time: $O(N_{val}^x)$ for $x\in\mathbb{N}$
Now, the knapsack problem has a pseudopolynomial, not polynomial, solution because the dynamic programming solution gives a running time dependent on a value -- i.e. $O(nW)$, where $W$ is a value representing the max capacity.
Now, a value can be converted into a size by representing it in terms of # of digits it takes to represent it. $N_{size}=Log_b(N_{val})$ tells you how many digits are needed to represent $N_{val}$ using base $b$. This can be solved for $N_{val}$ to give:
$$N_{val}=b^{N_{size}}$$
Plugging this into the pseudopolynomial time definition shows that it is exponential w.r.t $N_{size}$:
Pseudopoly. Time: $O(b^{xN_{size}})$ for $b, x\in\mathbb{N}$