Steve,
The units for r and tol must be in the SAME units as your input geometry, otherwise you'll be multiplying apples by pears. If the coordinates of your input are in feet then r and tol must also be in feet. Same goes for input geometry in meters or whatever.
The signature for buffering a point, multipoint, envelope is
Buffer(<a point, multipoint, envelope>, r, tol).
The signature for buffering a single line segment is
Buffer(begin point, end point, r, tol).
The signature for polylines and polygons is
OuterBuffer(< polyline, polygon>, r, tol).
Don't worry about the complexity of the code under the bonnet. Just drive the car. Hope you have a good ride