How to determine visible faces?
I found a working solution. I just removed the vertices from OFF which did not correspond with any face. That leads to correct bounding box dimensions. To find the correct bounding box position of the part I used the following:

# create a cube for the bounding box
bpy.ops.mesh.primitive_cube_add()
bound_box = bpy.context.active_object

# copy transforms
ob = bpy.data.objects['off_object_name']
bound_box.dimensions = ob.dimensions
bound_box.rotation_euler = ob.rotation_euler

# calculate part center
centre = sum((Vector(b) for b in ob.bound_box), Vector())
centre /= 8

# set location using world matrix transformation
bound_box.location = (centre[0], centre[1], centre[2])
bound_box.location = ob.matrix_world * bound_box.location