You are not ensuring that the indices are within the bounds of your string. For example, find($Message/Content,':')+2. You do not know if the index at which ':' is found +2 is a valid index in your string. If the colon is at 148, and your string is only 149 characters then 150 will result in an out of bounds exception.
To more easily debug and see what I mean, you should put each of your expressions into variables. Put each find expression into its own integer variable. Then you can verify if the indices are within bounds.
EDIT: It seems you are essentially re-piecing (almost) the original string back together. Perhaps you can elaborate on what you're trying to accomplish, and we can help you figure it out.
check for $Message != empty
Other improvement suggestions:
Note that $Message is not checked for null. Furthermore in the case colon is not found, find() will return -1, which will result in an out of bounds exception as well.
I think there is a more convenient way to express such a complex find/substring pattern by using regex replacements. But to translate the example above, it would be useful if you can explain what it does, because it is a bit hard to extract that from the expression given all the parenthesis.