In the EJB 3.2 spec you can read the following
13.4.3 Timer Expiration and Timeout Callback Method
If container-managed transaction demarcation is used and the REQUIRED or REQUIRES_NEW transaction attribute is specified or defaulted (Required or RequiresNew if the deployment descriptor is used), the container must begin a new transaction prior to invoking the timeout callback method. If the transaction fails or is rolled back, the container must retry the timeout at least once.
emphasis (mine) on the bold part.
glassfish has an option to configure the number of retries as described in this question: avoid-expunging-timer-on-glassfish. Not sure if similiar exists on jboss/wildfly
The answer to same question gives a nice way to avoid the problem all together by placing the @Schedule annotated method in a separate ejb.