This is 1 way: First you need to find what is nearest point from collision point to ground. These 2 points form land's "normal vector". Then mirror object movement vector with normal vector.

Code:
P3f = record x,y,z: single; end;

function glmReflectVector3f(v, normal: p3f): p3f;
var temp: single;
begin
  temp:=2*(v.x*normal.x+v.y*normal.y+v.z*normal.z);
  result.x:=v.x-normal.x*temp;
  result.y:=v.y-normal.y*temp;
  result.z:=v.z-normal.z*temp;
end;
edit: This should be easy to convert in 2D too, or set Z as 0...