Answering your first question, If MCTS is used in its basic form without any improvements, it may fail to suggest reasonable moves. It may happen if nodes are not visited adequately which results in inaccurate estimates.
However, MCTS can be improved using some techniques. It involves domain specific as well as domain-independent techniques.
In domain-specific techniques, the simulation stage produces more realistic play outs rather than stochastic simulations. Though it requires knowledge of game-specific techniques and rules.
Now coming to your second question: I think the problem was that the search space was too small. This ensures that even if the selection does select a move that is actually terminal, this move is never chosen and resources are used to explore other moves instead. You can add the following code in your program:
//If this move is terminal and the opponent wins, this means we have previously made a move where the opponent can always find a move to win
if (game.GetWinner() == Opponent(startPlayer))
current.parent.value = int.MinValue;
If you want to make your career in Artificial Intelligence then go through this video: