Extruded rectangle boolean operator acting strange

I have a rectangle from an SVG that is extruded into a cube. The missing faces are added. All this from a small script:

bpy.ops.object.select_all(action='SELECT')
bpy.ops.import_curve.svg(filepath = file_outline)
newcurves = [c for c in bpy.context.scene.objects if not c.select]
bpy.ops.object.select_all(action='DESELECT')
for c in newcurves:
c.select = True

bpy.context.scene.objects.active = newcurves[0]
bpy.ops.object.join()
curve = bpy.context.object
curve.scale = [28.888, 28.888, 1]
bpy.ops.object.convert(target='MESH')
bpy.ops.object.mode_set(mode='EDIT', toggle=False)
bpy.ops.mesh.select_all(action='SELECT')
bpy.ops.mesh.remove_doubles()

bpy.ops.mesh.extrude_edges_move(
TRANSFORM_OT_translate={
"value": (0, 0, 1.6)
}
)

bpy.ops.mesh.select_all(action='SELECT')
bpy.ops.object.mode_set(mode='OBJECT', toggle=False)


Now when I create (manually in the GUI) a cylinder and place it within the cube, then add a boolean DIFFEERENCE modifier to the cube (to make a hole in the cube) the strangest thing happens:

The top face has a hole in it. The bottom face has an outline of the cylinder added to it.

Now, if I stop my script just before the extrude and then do the extrude manually, then continue the script (copy and paste in the console) I can then do the boolean operation fine.

So I figure there is something wrong with my extrude command. So I grab the command from the info panel that worked when doing it manually and pasted that into my script instead. The results are identical - the boolean fails miserably.

bpy.ops.mesh.extrude_region_move(MESH_OT_extrude_region={"mirror":False}, TRANSFORM_OT_translate={"value":(0, 0, 1.6), "constraint_axis":(False, False, True), "constraint_orientation":'GLOBAL', "mirror":False, "proportional":'DISABLED', "proportional_edit_falloff":'SMOOTH', "proportional_size":1, "snap":False, "snap_target":'CLOSEST', "snap_point":(0, 0, 0), "snap_align":False, "snap_normal":(0, 0, 0), "gpencil_strokes":False, "texture_space":False, "remove_on_cancel":False, "release_confirm":False})


This same script I have been using on a more complex path quite happily with no issues. But as soon as I use this much simpler SVG it croaks rather nastilly.

Is this a bug in the boolean modifier (I am on 2.77 on Ubuntu) or something in my script that is breaking the boolean's ability to do its job?