I'm just a big toddler in python, but after looking at your code, I tried a slightly different approach. I get confused with counter variables and avoid them by stepping through a list based on the length of the list:
fc = 'PLOTS_Test'
arcpy.MakeFeatureLayer_management(fc,'Test_lyr')
field_list = []
with arcpy.da.SearchCursor( fc, 'LinkKey') as cursor:
for row in cursor:
field_list.append(row[0])
for i in range(len(field_list)):
where= 'LinkKey = {}'.format(field_list)
arcpy.SelectLayerByAttribute_management('Test_lyr','ADD_TO_SELECTION',where)
print 'Records Selected = {}'.format(arcpy.GetCount_management('Test_lyr'))
arcpy.CopyFeatures_management('Test_lyr','sasal')
I took out kala, as I'm not sure you actually need it, and just work directly with the feature layer from the feature class.
edited moments later: sometimes the GetCount_management can throw you a curve. It honors the selection and will return the number selected, IF there is a selected set. If nothing is selected, you get the count of all the records. A way around that is using arcpy.Describe, which doesn't give you a number of selected records, but can tell you if you have selected records. I've used it this way:
if arcpy.Describe("view").FIDSet =='':
pass
elif int(arcpy.Describe("view").FIDSet[0]) >= 1:
and edited a little later after that....
I took a look at get list of highlighted features within a selection and the response from Richard Fairhurst provided a little inspiration to get the number of selected records:
if int(arcpy.Describe("view").FIDSet[0]) >= 1:
i = 0
rows = arcpy.da.SearchCursor("view","*")
for row in rows:
i = i+1
print 'Rows selected = {}'.format(i)
That should just about do it....