Did you look at form.errors to find out why it returns false? If form.errors doesn't exist, the accepts() method didn't see it as having been submitted, and will return false.
See Example 28 in http://web2py.com/examples/default/examples for the three cases: unsubmitted, submitted no error, submitted w/ error Rufus