How do you add an object to a specific collection only in python?
bpy.ops.mesh.primitive_plane_add ...

... is doing stuff behind your back, based on the current context. It's creating the mesh, then an object from it, and linking it to the context's active collection. So when you call link, it's linking for the second time. 

You could make the 'Tiles' collection active, and let bpy.ops.mesh.primitive_plane_add  do its own thing in there...

import bpy

C = bpy.context
D = bpy.data


if D.collections.get('Tiles'):
    tiles_collection = D.collections['Tiles']
else:
    tiles_collection = D.collections.new('Tiles')
    C.scene.collection.children.link(tiles_collection)

C.view_layer.active_layer_collection = \
C.view_layer.layer_collection.children['Tiles']

bpy.ops.mesh.primitive_plane_add(location=(1, -5, 0), size=1)


... I'm not saying it's a great thing to do, that would take someone with more experience than me. It may be better not to call bpy.ops.xxx at all, to avoid context connected activity, or the way you're doing it now may be just fine.