This is a known limitation/feature/issue of timer based UCAS, if the invoked service does not complete within a stipulated amount of time the UCA may fire twice/thrice.
There can be two solutions to this issue
1. Convert your service invocations to bpd instance based invocations, the UCA simply launches a BPD instance which in turn does the service call so that timeout does not happen in the UCA service.
2. another solution will be to create an EPV and record the date part of current datetime to it after every invocation and at the beginning of the invocation check if it is the same date do not invoke the activity.