Try to separate the two actions, because I think halevt will be called another times when the device gets mounted :
Code:
<halevt:Device match="&MOUNTABLE; & hal.volume.is_disc=false">
<halevt:OnInit exec='halevt-mount -u $hal.udi$ - m 002'/>
</halevt:Device>
<halevt:Device match="hal.block.device & hal.block.is_volume = true & hal.volume.mount_point">
<halevt:Property name="hal.volume.is_mounted">
<halevt:Action value="true" exec='usr/sbin/myProgram Add_Init USB "$hal.udi$ "$hal.volume.mount_point$'/>
</halevt:Property>
</halevt:Device>
You will have to adapt the second match conditions to execute myProgram only when it is required. The example above will run it each times any block device volume is mounted.
Also I don't know if you call your program with "usr/sbin" or "/usr/sbin";
and are you sure of the double quotes in :
myProgram Add_Init USB
"$hal.udi$
"$hal.volume.mount_point$
?
I just realized you missed a $ in your exec line and the ; doesn't seem correct too :
<halevt:OnInit exec='halevt-mount -u $hal.udi - m 002 ; ...
instead of
<halevt:OnInit exec='halevt-mount -u $hal.udi
$ - m 002
&& ...
Maybe it is enough to make your command to work.