#JasmineSpring, one thing you need to do after using any cursor, is you need to del the cursor. Your code should look something like this...
import arcpy
# Get the selected layer
layer = arcpy.GetParameterAsText(0)
# Create a list of field names starting with "poa"
poa_fields = [field.name for field in arcpy.ListFields(layer) if field.name.startswith("poa")]
for field in poa_fields:
with arcpy.da.UpdateCursor(layer, poa_fields) as cursor:
for row in cursor:
if row[0] is None:
row[0]="1"
cursor.updateRow(row)
del cursor
# Use the Field Calculator to calculate the product
expression = "1" if not poa_fields else " * ".join([f"!{field}!" for field in poa_fields])
arcpy.CalculateField_management(layer, "Product_poa", expression, "PYTHON")
(see line 15).