Solved it. When I was creating my new zip/kmz my code was creating various folders within the zip/kmz.
to: NewZip.write(addedfile, newfl)
I have KMZs that need changes to their points. The changes are simply updating their attributes - changing the values in the tables that appear when a point is clicked.
My method involves extracting the files from the KMZ to a temp location, making a copy of the "doc.kml", digging through the copied "doc.kml" for instances of text that needs to be changed, and then renaming the old KMZ, creating a new KMZ with the same name as the original, and adding the all the files (including my edited "doc.kml") to the new KMZ.
I have automated this process with a pthython script, but when I run it, any KMZs that gets updated have broken point icons. i can't find anything that would cause this - my changes are quite minimal and do not replace and obvious KML. Changes are formatted: "PR_A_1567_20" to "PR_AB_1567_20", so essentially I am adding an extra letter into a few lines of the KML.
Anyone know why this might break icons? Everything else still functions perfectly.
Edit: Simpler question: Why does this KMZ work: https://drive.google.com/file/d/0B9n9YNu8ulsmb1ljQmJMdW5QQXc/edit?usp=sharing
import os import zipfile import arcpy folder =r"C:\KMZTest" table = r"C:\ProjectNumberSwitch_20140729.xlsx\C_Projects_Being_Switched$" tblcolm = "Old_P6_NBR" temploc = r"C:\KMZTest\Temp" oldP6list =  print "Finding project numbers" cursor = arcpy.da.SearchCursor(table, tblcolm) for row in cursor: oldP6list.append(row) del row del cursor updatedlist =  for root, dirs, files in os.walk(folder): for fil in files: if "Projects.kmz" in fil or "Points.kmz" in fil: print print fil print flpath = os.path.join (root, fil) zipfl = zipfile.ZipFile(flpath) foundoldP6 = False for content in zipfl.namelist(): zipfl.extract(content, temploc) if content == "doc.kml": doc = os.path.join(temploc, content) os.rename(doc, doc + ".tmp") destination = open(doc, "w") source = open(doc + ".tmp", "r") for line in source: for oldP6 in oldP6list: if oldP6 in line: foundoldP6 = True print "found:", oldP6 line = (line.replace(oldP6, oldP6.split("C") + "VC" + oldP6.split("C"))) destination.write(line) source.close() destination.close() zipfl.close() if foundoldP6 == True: print "Updating", fil updatedlist.append(fil) os.rename(flpath, flpath + ".tmp") NewZip = zipfile.ZipFile(flpath, "w") for newfl in os.listdir(temploc): if not newfl.endswith(".tmp"): addedfile = os.path.join (temploc, newfl) NewZip.write(addedfile) os.remove(flpath + ".tmp") for oldfile in os.listdir(temploc): os.remove (os.path.join(temploc, oldfile)) print print print "Updated:" for update in updatedlist: print update print print "Done"