Jessica Pegula fought back from a set down to reach the WTA Charleston Open semi-finals with a 3-6, 6-3, 6-2 win against Russia's Diana Shnaider.