In addition I added a point animation and observed some oddly behaviour of Dynamic and ContourPlot3D.
Functions and Conditions.
yPath has to be defined immidiately (without ":") cause the later \
recursive defintion wouldn' t work otherwise
yPath[x_] = -((3 Sqrt[25 - x^2])/5);
zPath[x_] := Sin[x] Sin[yPath[x]]
comparison[x_] := yPath[x] == (-yPath[x])
Coordinates of the point (Sphere)
coords[x_] := {x, yPath[x], zPath[x]}
dx[x_] := coords[x][[1]]
dy[x_] := coords[x][[2]]
dz[x_] := coords[x][[3]]
Start position of the point an steps
xi = 3;
animationSteps = {0, 1, 2, 3, 4, 5, 4, 3, 2, 1,
0, -1, -2, -3, -4, -5, -4, -3, -2, -1};
The Plot with the dynamic output you HAVE TO SEE ON YOUR SCREEN while manipulating.
Grid[{
{
Animate[Row[{"xi = ", xi = step}], {step, animationSteps},
AnimationRunning -> False],
Column[{Text[
"It is crazy, but you have to see the dynamic output (here \
below the text) on the screen while manipulating or the sphere will \
just be on one side of the cylinder (Mathematica 8)"],
granted = 0,
Dynamic[ If[comparison[xi] && granted == 0, {yPath[x_] = (-1)*yPath[x],
granted = 1}]],
Dynamic[If[comparison[xi], , granted = 0]]}]
},
{
Dynamic[ContourPlot3D[{
(*Cylinder *)
(xCont/5)^2 + (yCont/3)^2 == 1,
(*Trigonometric Layer *)
zCont == Sin[xCont] Sin[yCont],
(*Point/Sphere *)
(xCont - dx[xi])^2 + (yCont - dy[xi])^2 + (zCont - dz[xi])^2 ==
3},
{xCont, -10, 10}, {yCont, -10, 10}, {zCont, -5, 5},
ContourStyle -> {Blue, Red, Black},
AxesLabel -> {"x", "y", "z"} , PerformanceGoal -> "Speed",
ImageSize -> 300]]
}
}]

And as Gif with slitly other code instead of the Grid part
plot[xi_] := ContourPlot3D[{
(*Cylinder *)
(xCont/5)^2 + (yCont/3)^2 == 1,
(*Trigonometric Layer *)
zCont == Sin[xCont] Sin[yCont],
(*Point/Sphere *)
(xCont - dx[xi])^2 + (yCont - dy[xi])^2 + (zCont - dz[xi])^2 ==
0.5},
{xCont, -10, 10}, {yCont, -10, 10}, {zCont, -5, 5},
ContourStyle -> {{Blue, Opacity -> 0.5}, Red, Black},
AxesLabel -> {"x", "y", "z"} , PerformanceGoal -> "Quality",
ImageSize -> 300]
granted = 0
Dynamic[If[
comparison[xi] && granted == 0, {yPath[x_] = (-1)*yPath[x],
granted = 1}]]
Dynamic[If[comparison[xi], , granted = 0]]
Export[NotebookDirectory[] <> "OverlapAnimation.gif",
Table[plot[xi = animationSteps[[i]]], {i, Length[animationSteps]}]]

Some odd bahviour of ContourPlot3D:
If one of the limits - 5 or 5 is reached,the "ContourPlot3D" will oddly set its variables to its limits. So it sets here unauthorized x = 10, y =
10 and z = 10. Thats why I renamed the variables unique for ContourPlot3D in the code above
Remove["Global`*"]
yPath[x_] = -((3 Sqrt[25 - x^2])/5);
zPath[x_] := Sin[x] Sin[yPath[x]]
comparison[x2_] := yPath[x2] == (-yPath[x2]);
coords[x2_] :=
If[comparison[x2], {x2, yPath[x2], zPath[x2],
yPath[x_] = (-1)*yPath[x]}, {x2, yPath[x2], zPath[x2]}]
dx[x_] := coords[x][[1]]
dy[x_] := coords[x][[2]]
dz[x_] := coords[x][[3]]
xi = 3;
Dynamic[ContourPlot3D[{(x/5)^2 + (y/3)^2 == 1,
z == Sin[x] Sin[
y], (x - dx[xi])^2 + (y - dy[xi])^2 + (z - dz[xi])^2 ==
3}, {x, -10, 10}, {y, -10, 10}, {z, -10, 10},
ContourStyle -> {{Blue, Opacity[0.5]}, Red, Black},
AxesLabel -> {"x", "y", "z"} , PerformanceGoal -> "Speed"]]
{Slider[Dynamic[xi], {-5, 5}], Dynamic[xi]}
x will become defined unauthorized and so the sphrere will wanish in the plot
x
