You cannot use an AND within the <isNotNull> element. Instead, try something like this:
<select id="filterQuery" resultMap="guideline" parameterClass="filter">
SELECT * FROM TABLE_NAME
<dynamic prepend="WHERE">
<isNotNull property="lowerLimit" prepend="and">
distance <![CDATA[>=]]> #lowerLimit#
</isNotNull>
<isNotNull property="upperLimit" prepend="and">
distance <![CDATA[<=]]> #upperLimit
</isNotNull>
<isNotNull property="maxLowerLimit" prepend="and">
max_distance <![CDATA[>=]]> #maxLowerLimit#
</isNotNull>
<isNotNull property="maxUpperLimit" prepend="and">
max_distance <![CDATA[<=]]> #maxUpperLimit#
</isNotNull>
<isNotNull property="state" prepend="and">
region = #state#
</isNotNull>
</dynamic>
</select>
The <dynamic> element will include the WHERE clause only if at least one of the <isNotNull> elements produces output.