Interesting, this also worked for me before (I used it several times) but it also fails for me on QGIS 2.18.2.
Anyway, an alternative is to instead create a field which contains the zones for each feature and then use this field in your select expression. You can do this by creating a script which you can add by going to:
Processing Toolbox > Scripts > Tools > Create new script
The following is code taken from your link but slightly modified to run from the processing toolbox:
##Example=name
##Layer=vector point
##Field_Name=string
from qgis.core import QgsField
from math import floor
from PyQt4.QtCore import QVariant
layer = processing.getObject(Layer)
layer.dataProvider().addAttributes([QgsField(str(Field_Name), QVariant.String)])
layer.updateFields()
idx = layer.fieldNameIndex(str(Field_Name))
layer.startEditing()
for feat in layer.getFeatures():
pt = feat.geometry().centroid().asPoint()
longitude = pt.x()
latitude = pt.y()
zone_number = floor(((longitude + 180) / 6) % 60) + 1
if latitude >= 0:
zone_letter = 'N'
else:
zone_letter = 'S'
layer.changeAttributeValue(feat.id(), idx, '%d%s' % (int(zone_number), zone_letter))
layer.commitChanges()
Example:
Populated dataset from your link:

Script interface:

New attribute field added containing zones

Result of selecting the zones by expression (highlighted in yellow):

GetUtmZone()
then tried to select features based on an expression using that column and it fails the same way (no features selected). Interestingly, the features are labeled with the value of that column and they display correctly.