Using Cases:
data1 = {{1, a}, {10, a}, {5, b}, {4, c}};
data2 = {{1, a}, {10, a}, {5, b}, {4, c}, {7, c}};
Cases[#, {_, Alternatives @@ Keys[Select[CountsBy[#, Last], # > 1 &]]}] &@data1
({{1, a}, {10, a}})
Cases[#, {_, Alternatives @@ Keys[Select[CountsBy[#, Last], # > 1 &]]}] &@data2
({{1, a}, {10, a}, {4, c}, {7, c}})
Or using Pick, GatherBy and the third argument of GroupBy:
data3 = {{5, "f"}, {10, "b"}, {10, "e"}, {6, "c"}, {3, "c"}, {6, "e"}, {4, "a"},
{2, "c"}, {6, "f"}, {2, "g"}, {9, "e"}, {0, "d"}, {10, "c"}, {6, "b"},
{6, "c"}};
Pick[GatherBy[#, Last], Values[GroupBy[#, Last, Length[#] > 1 &]]] &@data3
({{{5, "f"}, {6, "f"}}, {{10, "b"}, {6, "b"}}, {{10, "e"}, {6, "e"}, {9, "e"}},
{{6, "c"}, {3, "c"}, {2, "c"}, {10, "c"}, {6, "c"}}})