Hi Arun,
Sadly, this is expected behaviour. That doesn't mean that you should be seeing the error, just that I'm not surprised that you have!!

When you recompile the package, everything is fine - your session can see that the package is there and is valid. If you have another SQL session open at the same time as recompilation, if you try and execute the package in the second session you get the same error as you see in the Workflow. Retry the same code, and the SQL session will pick up the new definition and run fine.
This is pretty much what the Workflow engine is doing - running in another session. The first time it tries to run your code, it errors as it detects that the package has changed. When you retry the activity from the notification, it works fine because it is picking up the new definition. There are two questions that need answering - how do we get rid of the error? and why does the error keep happening?
The second question is slightly easier, so I'll address that one first. I don't know. Oracle don't seem to know. When I worked for Oracle, I asked internally why this happened and no-one could tell me. The trick seems to be to only recompile the package body rather than the spec as well, but that's not much of an answer.
So, how do you get rid of the error? You need to force the session which is referencing the old version of the code to disconnect and reconnect, in order to pick up the latest version of the package. The most effective (but least user-friendly!) is to bounce the database - this ensures that all the sessions are disconnected and will reconnect as necessary. Next down the list, you can try bouncing Apache. This should have the same effect, but hopefully is a bit quicker so less disruptive. Finally, you can try bouncing all the concurrent managers
Workflow Agent Listener Service and
Workflow Mailer Service, which
might refresh the session.
HTH,
Matt