I figured it out. I needed to add arcpy.RefreshTOC(). duh. I'll give the correct answer to Rebecca as she got me onto the path of getting this working. Funny that I had previously looked at that link just didn't see the item about the feature datasets. Thanks also for your suggestions Mitch.
Here is the finished working script:
import arcpy
mxd = arcpy.mapping.MapDocument("CURRENT")
for lyr in arcpy.mapping.ListLayers(mxd):
if lyr.name == 'roads':
lyr.replaceDataSource(r"X:\GIS\geo_databases\labelling_features.gdb","FILEGDB_WORKSPACE","roads")
if lyr.name == 'railways':
lyr.replaceDataSource('X:/GIS/geo_databases/labelling_features.gdb','FILEGDB_WORKSPACE','railways')
elif lyr.name == 'rivers':
lyr.replaceDataSource('X:/GIS/geo_databases/labelling_features.gdb','FILEGDB_WORKSPACE','rivers')
elif lyr.name == 'lakes':
lyr.replaceDataSource('X:/GIS/geo_databases/labelling_features.gdb','FILEGDB_WORKSPACE','lakes')
elif lyr.name == 'bridge_polygons':
lyr.replaceDataSource('X:/GIS/geo_databases/planning_data.gdb','FILEGDB_WORKSPACE','bridge_polygons')
arcpy.RefreshTOC()
mxd.save
del mxd
Result = True
arcpy.SetParameterAsText(0,Result)