Submitted by GreedyGoblin, also found by chaduke, jasonxiale, 0xNineDec, and peakbolt
https://github.com/code-423n4/2023-01-popcorn/blob/main/src/vault/Vault.sol#L480 
https://github.com/code-423n4/2023-01-popcorn/blob/main/src/vault/Vault.sol#L488
https://github.com/code-423n4/2023-01-popcorn/blob/main/src/vault/Vault.sol#L540
https://github.com/code-423n4/2023-01-popcorn/blob/main/src/vault/Vault.sol#L429
The Owner of the contract can change the fee, and after the rage quit period it can cash those fees for the period of time where different fees were active.
This allows the Owner to collect as much management fee as it wants for an already passed time period, when it should only apply from the time it has been changed.
This contract allows the Owner to change the fees. To do so the proposeFees() procedure is called. This procedure will update the proposed fees, which then can be applied by calling the changeFees() procedure after the rage quit period has passed (the rage quit period is a period of time that has to pass between proposing a fee and applying it).
To collect the fees, the Owner calls the procedure takeManagementAndPerformanceFees(). This procedure contains the modifier takeFees() which collects the fees.
Inside the takeFees() modifier the code if (managementFee > 0) feesUpdatedAt = block.timestamp; updates the variable feesUpdatedAt only if the fees are greater than 0. This variable is used as a timestamp of when was the last time fees were collected.
managementFee is calculated using the function accruedManagementFees().
Here the managementFee is calculated using the feesUpdatedAt variable. In the calculation, the further apart the feesUpdated is in comparison to the block.timestamp, the greater the fee will be.
This feesUpdatedAt variable is not updated when the fee is changed using changeFee() or when the fees are proposed using proposeFee().
This allows the owner to collect a fee for a period of time where the fee was different.
Current behaviour:
Ideal behaviour:
The diagrams show how the management fees are charged for a period of time where they were not active.
The ideal behaviour diagram shows how it should behave in order to apply the management fees fairly.
Steps:
With these 4 steps, a Vault creator can charge a new management fee for period of time where a different fee was active.
Visual Studio Code
The variable feesUpdatedAt should be updated even when the fees are 0.
Fees should be collected when a new fee is applied, therefore the time period where the former fee was current will be collected correctly and the feesUpdatedAt variable will be updated to the timestamp of when the new fee has been applied.
RedVeil (Popcorn) confirmed 
