I ended up creating two 'extra' fields that would be hidden on the form. The first is just a count of how many "Yes" values are selected. The second is to hold the string. To start with for each "Yes", I concatenate the 'Application name" and ", ". Then If there more than two selected the " and" replaces the second to last comma. In both cases a period replaces the last comma that is created in the concatenate functions.
The formula for the "Count Yes" field :
=COUNTIF([Application_A, Application_B, Application_C, Application_D], "=Yes")
The formula for the Email Formatting field:
=IF(Count_Yes>1,
SUBSTITUTE(
SUBSTITUTE(
CONCATENATE(
IF(Application_A="Yes", "Application A, ", ""),
IF(Application_B="Yes", "Application B, ", ""),
IF(Application_C="Yes", "Application C, ", ""),
IF(Application_D="Yes", "Application D, ", "")
),
",",". ", Count_Yes
),
","," and", Count_Yes-1
),
SUBSTITUTE(
CONCATENATE(
IF(Application_A="Yes", "Application A, ", ""),
IF(Application_B="Yes", "Application B, ", ""),
IF(Application_C="Yes", "Application C, ", ""),
IF(Application_D="Yes", "Application D, ", "")
),
",",". ", Count_Yes
)
)

I hope this is what you were looking for :)
EDIT: One change I would most likely do on my own forms, would be to have a field that holds just the basic concatenated string output. This way if new Applications are added or some removed from the form I would only need to change the one concatenate function. It would also make the Email Formatting field's function easier to read (in my opinion).