Here are some ideas on why it may not be working:
1) You must have a mainline call to OSSignalSem() if you're using OSFROM_ANYWHERE. If it's actually doing something (and not a dummy call), are you protecting it from interrupts as is outlined in AN-9?
2) You should upgrade to v3.0.0 (you are eligible for a free upgrade). We'll email you how tomorrow (Saturday). v3.0.0 also requires protection, but provides some services (OSProtect() and OSUnprotect()) to make life simpler. This is due to the design of PICC/PICC-18 (parameters are in static areas, not on any stack), and is unavoidable.
3) Make sure you're using the latest version of PICC-18 (v8.11PL1). Earler versions had a few problems, though I don't think they were related to what you're seeing.
4) Keep in mind that you can split up Salvo's variables and locate different portions in different banks, e.g.
code:#define OSLOC_ALL near persistent
#define OSLOC_ECB persistent
will place all but the event control blocks in the access bank, but will place the ecbs in a normal bank. Again, I don't see how this would make any difference, but you may be able to discern a pattern ...
It would be helpful if we could know where the problem is. Is the semaphore signaled successfully (i.e. does its value increase with each call to OSSignalSem())? If not, you may want to check OSSignalSem()'s return value. If it is, then it's worth checking to see if the semaphore was really incremented, and if OSSignalSem() is affecting the same bytes of data (the ecb) that OS_WaitSem() is reading from.
Apart from perhaps failing to protect mainline calls of functions that are also called from ISRs, you appear to be doing everything correctly ...
BTW, this also assumes you're doing a source-code build.
------------------
--------
Salvo Technical Support
Please request all tech support through the Forums.