Can there exist more than one optimal solution in a dynamic programming problem?
Yes, but it's implicit in the dynamic programming table.

The dynamic programming table starts by filling out objective values for trivial sub-solutions, then combining them to obtain the optimum objective value by the time the final entry is reached. The central part to emphasise here is that the dynamic programming table has objective values as its entries, rather than the sub-solutions themselves (although you may hang on to all sorts of information to help the computation of course). So the way you obtain the actual solution from a dynamic programming table is to trace back from the final entry reconstructing the steps taken to get there.

Then if there's multiple ways to get there, in the tracing you just run into situations where you can go more than one way. If you were only interested in obtaining some solution, you just pick a route. If you want all of them, you exhaustively explored all routes back through the table.