Here is a possible solution. First, we define the final time
tf = 5;
and we generate n initial points, according to a gaussian distribution with variance sigma, centered in x0,p0.
InitialPoints =
With[{x0 = 0, p0 = 0, sigma = .3, n = 10},
Transpose[{RandomVariate[NormalDistribution[x0, sigma], n],
RandomVariate[NormalDistribution[p0, sigma], n]}]]
The result is a list of n pairs of coordinates.
Then we solve the differential equations for each given initial point
s = NDSolve[{x'[t] == -p[t]*Cos[2*x[t]],
p'[t] == (1 - p[t]^2)*Sin[2*x[t]], x[0] == #[[1]],
p[0] == #[[2]]}, {x[t], p[t]}, {t, 0, 5}] & /@ InitialPoints
The phase space plot (your code)
Ham[x_, p_] := (1 - p^2)*Cos[2*x]
cont = ContourPlot[Ham[x, p], {x, 0, 2 Pi}, {p, -1, 1},
ContourShading -> None, ContourStyle -> GrayLevel[0.1],
Contours -> 20];
And the animated trajectories:
Animate[Show[cont, ParametricPlot[{x[t], p[t]} /. s, {t, 0, ti}]], {ti, 0, tf}]
The result is

EDIT
To obtain the points at a specific time instant ti, you can use
Flatten[{x[t], p[t]} /. s /. t -> ti, 1]
to obtain a list of pairs of coordinates, and
Show[cont, Graphics[Point[Flatten[{x[t], p[t]} /. s /. t -> ti, 1]]]]
to obtain a plot like

Of course you can change the point style to suit your needs. You can also animate the plot, or show initial and final points with different colors.