Why do I get a type error when trying to name a newly created object?
This works fine for me with repeated calls to 

makecircle(2, 3, 10, 10, 10, 1, (0,0,0))  


I end up with "Tile10.3" and then a whole lot of "Tile10.001" using the blender naming system.  

You need define a blender object property once, all the bpy.types.Object.xxxx = IntProperty(...) should be moved to a register method, called once. 

The error you are getting is almost certainly that you have defined

bpy.types.Object.name = IntProperty(...)


elsewhere in your code.  As long as that code has been run ONCE somewhere while the file is open, the name property of an object is expected to be an Integer and will remain throwing that error if you try and set it to a string.
If I run the offensive little bit of code then check the console

&gt;&gt;&gt;C.object.name
0


which isn't really what we want.

import bpy
from bpy.props import IntProperty, FloatProperty, FloatVectorProperty
from math import radians

def makecircle(uid, id, ring, rad, vert, sthick, origin):
    bpy.ops.mesh.primitive_circle_add(
        radius = rad,
        vertices = vert,
        location = origin,
        rotation = (0,0,radians(45)))
    circle = bpy.context.object 
    circle.ring = ring

    circle.name = "Tile" + str(ring) + "." + str(id)

def register():
    bpy.types.Object.time = FloatProperty(name="Time")
    bpy.types.Object.duration = FloatProperty(name="Duration")
    bpy.types.Object.pause = FloatProperty(name="Pause")
    bpy.types.Object.interval = FloatProperty(name="Interval")
    bpy.types.Object.target_rotation = FloatVectorProperty(name="Target Rotation")
    bpy.types.Object.ring = IntProperty(name="Ring")
    bpy.types.Object.event = IntProperty(name="Event")
    bpy.types.Object.uid = IntProperty(name="Uid")  
    # will produce the error you are getting.    
    #bpy.types.Object.name = IntProperty()
register()

makecircle(2,3,10,10,10,1, (0,0,0))