I finally got this to work - though I had to create a copy of my queried feature class. Here's the code in case it helps anyone.
# 1. Import modules and set environment
import arcpy, os, sys, traceback
from arcpy import env
env.workspace = r"F:\Workspace\AFPE\NRS03_AFPE.gdb"
path = 'F:\\Workspace\\AFPE\\2016\\RawMaps2\\'
# stop temp layer from being added to map
arcpy.env.addOutputsToMap = False
# 2. Open a map document - F:\Workspace\AFPE\2016\RawMaps\test.mxd
mxd = arcpy.mapping.MapDocument(r"F:\Workspace\AFPE\2016\RawMaps2\14004.mxd")
df = arcpy.mapping.ListDataFrames(mxd)[0]
try:
# 3. grab USAState layer
lyr = arcpy.mapping.ListLayers(mxd,"USAState",df)
stLyr = lyr[0]
print df.scale
# 4. make duplicate layer of queried USAState and zoom to extent
arcpy.CopyFeatures_management(stLyr, r"in_memory\temp")
desc = arcpy.Describe(r"in_memory\temp")
ext = desc.extent
mxd.activeDataFrame.extent = ext
arcpy.RefreshActiveView()
print df.scale
# 5. clean up
del df, mxd, lyr, stLyr, env
arcpy.Delete_management(r"in_memory\temp")
print 'Map extent complete.'
except:
print 'Program failed.'
del df, mxd, lyr, stLyr, env
arcpy.Delete_management(r"in_memory\temp")
tb = sys.exc_info()[2]
tbinfo = traceback.format_tb(tb)[0]
pymsg = "PYTHON ERRORS:\nTraceback Info:\n" + tbinfo + "\nError Info:\n " + str(sys.exc_type) + ": " + str(sys.exc_value) + "\n"
msgs = "ARCPY ERRORS:\n" + arcpy.GetMessages(2) + "\n"
arcpy.AddError(msgs)
arcpy.AddError(pymsg)
print msgs
print pymsg
arcpy.AddMessage(arcpy.GetMessages(1))
print arcpy.GetMessages(1)