Updating an auto-generated invoice (future) when current plan changes
Your code is very readable. Given the provided snippets of code, I won't focus this review on overall architecture (as I'm not sure what the entire system does). I'd like focus on two areas of this code: comments and method names.

When reading your comments I asked my self the following question (taken directly from Code Complete 2).

Do comments explain the code's intent or summarize what the code does, rather than just repeating the code?

# Returns the new adjusted amount
# Iterate through the invoice's items.
# Update the manual_invoice.


These comments repeat what your code does. Removing them would improve the readability and reduce the length of your code.

Next, the following comment and method invocation:

# Set new_amount by taking the new max_users quantity and multiply it
#   by the previous amount. Then divide it by the previous max_users
#   quantity. Finally, divide by payment frequency per term.
new_amount = @subscription.new_amount(max_users, item)


A 3 line comment before a method call such as this is a great opportunity to rename your method name to be more descriptive and possibly avoid a comment altogether. Here is an idea of a possible name:

adjusted_amount = @subscription.adjust_amount(max_users, item)


What other method names would better describe what this method does? Could you move this method to another Model? 

Don't be afraid to use 3 or more words to describe a method if that's what it takes. Better to have a long method name instead of a 3-line comment.

I believe you could improve these two lines:

# Guards changing of plan from blowing up if manual_invoice.nil?
if manual_invoice


By replacing them with one line:

unless manual_invoice.nil?


Finally, inside the method new_amount I believe referencing model attributes with self would the improve the readability of your code by differentiating parameters from model attributes. 

case self.term_type
# ...
end