Ah yes that was the problem. I added a command (as a list comprehension) to change the integer grids to float and *greatly* simplified the map algebra expression. Everything works as it should. Thanks Dan!
import arcgisscripting,os
gp = arcgisscripting.create()
gp.OverwriteOutput = 1
gp.CheckOutExtension("Spatial")
gp.Workspace = "C:\\Projects\\GIS data\\OBIA nearshore\\temporary\\"
DOW = '01008900'
lake = os.path.join("\\".join(gp.Workspace.split("\\")[:-1]),"buffers all",DOW + "_all_buff.img")
lake_buff = os.path.join("\\".join(gp.Workspace.split("\\")[:-1]),"buffers all",DOW + "_100m.shp")
try:
print "\nExtracting area of " + DOW + " for processing"
gp.CopyRaster_management (lake, "g1tmp.img")
gp.RasterToOtherFormat_conversion("g1tmp.img", gp.Workspace, "GRID")
gp.ExtractByMask_sa("g1tmp", lake_buff, "g2tmp")
print "Converting to float"
[gp.float_sa("g2tmp" + x, "g2tmp" + x + "_flt") for x in ("c1","c4")]
print "Processing"
express = "((g2tmpc4_flt - g2tmpc1_flt) / (g2tmpc4_flt + g2tmpc1_flt))"
out = DOW + "_ndvi.img"
gp.singleoutputmapalgebra_sa(express, out)
except:
print gp.GetMessages()
print "\ndone"
-Marcus