Joshua,
I tried running the script with only a single MXD.save() in my code, right at the end, outside of all for loops, and it worked!
-Zack
Wow, I wouldn't have expected that! But now that you mention it, it seems like every time you use MXD.save() the changes to the MXD get lost in limbo until you delete the MXD object. But that means you need to re-open the MXD again, which isn't ideal and your code would then look something like this:
MXD = arcpy.mapping.MapDocument(MXD_file)
DF = arcpy.mapping.ListDataFrames(MXD)[0]
LYR_list_MXD = arcpy.mapping.ListLayers(MXD,"*_env*",DF)
LYR_count = len(LYR_list_MXD)
for LYR in LYR_list_MXD:
LYR.visible = False
MXD.save()
del MXD
# Turn on each layer individually and export map as new PDF
for i in range(LYR_count):
# now you need to reopen the MXD...
MXD = arcpy.mapping.MapDocument(MXD_file)
DF = arcpy.mapping.ListDataFrames(MXD)[0]
LYR = arcpy.mapping.ListLayers(MXD,"*_env*",DF)
LYR.visible = True
output_PDF = OutputPDFFolder + "\\" + str(LYR) + ".pdf"
arcpy.mapping.ExportToPDF(MXD, output_PDF)
LYR.visible = False
MXD.save()
del MXD
Note I've only tested this when running a script outside of ArcMap and not using "CURRENT" as your map document.