If your soldier gets gravely wounded in a mission, there is a chance that the soldier gets shaken. This chance is 20/25/25/30% for the four difficulties.
What is gravely wounded? It means that the recovery time is more than 168 Hours (336 on Legendary) - this is determined at the end of the mission.
How is recovery time determined? Based on the lowest HP percentage at any point in the mission, a number is generated within certain limits. There are four "buckets": up to 20%, 21-50%, 51-75%, 76+%.
Example, your Soldier has 10 HP and takes 6 Damage, which brings him down to 40% health. At the end of the mission, the game looks in the 21-50% bucket to see the range of how long recovery takes and picks a random number from that. If that random number is more than 168 hours (336 on legendary), you're gravely wounded and the game rolls if you're shaken.
Note that the source of damage doesn't play into it, and neither does healing. The game records the lowest your HP ever was. E.g., 10 health, take 6 damage, heal 4 damage, take 3 more damage, heal 4 damage -> Even though you end the mission with 9 HP, the game records that you were down to 4 HP, which is 40% of 10. That percentage is the ONLY thing that counts.
I do note that the spread between best and worst recover time is MASSIVE. For example, a single point of damage (the 76%+ bucket) on Rookie difficulty puts your Soldier out of commission for 5 to 25 days - completely random.
For more technical details, I dug into the source code here.
Bonus Answer: If you recover from being shaken, you get a permanent increase to Will (4 to 13 points) and can't be shaken again - it's like Vaccination.
The presence of Buffs / Debuffs can be seen in the lower-right of each units' selection icon. For enemies, this is the icon you get when you have sight on them. For your own units, this is in the lower left, by their name.
Hovering over this icon will show what buffs/debuffs are currently active.
Best Answer
Given that your soldier already has been shaken he can't be shaken again.
For reference look up the earlier question: What's the best way to prevent my squad members from being shaken?